博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
万能写入sql语句,并且防注入
阅读量:7309 次
发布时间:2019-06-30

本文共 2315 字,大约阅读时间需要 7 分钟。

通过perpare()方法和检查字段防sql注入.
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );$_POST=array('title'=>23,'content'=>'kmm');$keys= array_keys($_POST);/** * $filetarr数组用于规定只可以写入的字段 */$filetarr=array('title','content');/** *$tableName表的名字 */$tableName='article';$filtre=true;foreach ($keys as $value){    if(in_array($value, $filetarr,true)){            }else{        //var_dump($value);        $filtre=false;        break;    }}if($filtre){    $fields=implode(',', $keys);    $fieldszwh=':'.implode(',:', $keys);    $sql="insert into {
$tableName}({
$fields}) values({
$fieldszwh})"; $pdostatement= $pdo->prepare($sql); $pdostatement->execute($_POST); var_dump($pdostatement->errorInfo());}else{ echo '非法字段';}

 

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');/** *$tableName表名 */$tableName='article';$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 {
$tableName} 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 '非法字段';}

 

转载于:https://www.cnblogs.com/zuoxiaobing/p/3687824.html

你可能感兴趣的文章
互联网通用架构技术----分布式事务解决方案
查看>>
mysql安装
查看>>
nginx安装 nginx: [emerg] getpwnam(“www”) failed 错误
查看>>
WebView实现文件下载功能
查看>>
fetch 超时处理
查看>>
乐观锁&悲观锁
查看>>
IntelliJ IDEA 2016.2激活方法汇总
查看>>
10大最重要的Web安全风险之四--A4-不安全的直接对象引用
查看>>
Android Studio创建的Android项目一般需要忽略
查看>>
iOS优化(一)内存优化经验
查看>>
正向代理与反向代理有什么区别
查看>>
ASP如何完全调取带有Html标记的数据
查看>>
hadoop启动时,报ssh: Could not resolve hostname xxx: Name or service not known
查看>>
我的友情链接
查看>>
心态与处理问题的方式
查看>>
ubuntu配置ftp服务和ssh服务
查看>>
Hadoop学习--伪分布式部署--day01
查看>>
Spring中Bean的配置
查看>>
react-webpack
查看>>
重启ipconfig 时,出现错误:Error: Connection activation failed.....解决方法
查看>>