万能写入sql语句,并且防注入

发表于:2014-4-30 11:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:左小兵    来源:51Testing软件测试网采编

分享:
  2.万能条件语句,同样通过字段限制防注入
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'km');
$keys= array_keys($_POST);
/**
* $filetarr数组用于规定只可以写入的字段
*/
$filetarr=array('title','content');
$filtre=true;
$where='';
/**
*$wherearr数组用来根据字段指定查询条件,例如大于,等于,like
*/
$wherearr=array('title'=>'like','content'=>'>%');
foreach ($keys as $value){
if(in_array($value, $filetarr,true)){
if($wherearr[$value]==='between'){
if(count(explode(',', $_POST[$value]))===1){
break;
}
$where.='and '.$value.' between '.":{$value}left".' and '.":{$value}right ";
$_POST[$value]=explode(',', $_POST[$value]);
$_POST[$value.'left']=$_POST[$value][0];
$_POST[$value.'right']=$_POST[$value][1];
unset($_POST[$value]);
}else{
$where.='and '.$value.' '.$wherearr[$value].' '.":{$value} ";
}
}else{
//var_dump($value);
$filtre=false;
break;
}
}
/**
*
*如果用or连接条件语句,截取前面两个字符
*/
$where=substr($where,3);
if($filtre){
$fields=implode(',', $keys);
$fieldszwh=':'.implode(',:', $keys);
$sql="select  * from article where {$where}";
var_dump($sql);
$pdostatement= $pdo->prepare($sql);
$pdostatement->execute($_POST);
$re=     $pdostatement->fetchAll();
var_dump($pdostatement->errorInfo());
var_dump($_POST);
var_dump($re);
}else{
echo '非法字段';
}
22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号