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

简介:
通过perpare()方法和检查字段防sql注入.
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'kmm');
keys=arraykeys(_POST);
/**
* $filetarr数组用于规定只可以写入的字段
*/
$filetarr=array('title','content');
$filtre=true;
foreach (keysasvalue){
if(in_array(value,filetarr,true)){
}else{
//var_dump($value);
$filtre=false;
break;
}
}
if($filtre){
fields=implode(,,keys);
fieldszwh=:.implode(,:,keys);
sql="insert into article({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=arraykeys(_POST);
/**
* $filetarr数组用于规定只可以写入的字段
*/
$filetarr=array('title','content');
$filtre=true;
$where='';
/**
*$wherearr数组用来根据字段指定查询条件,例如大于,等于,like
*/
$wherearr=array('title'=>'like','content'=>'>%');
foreach (keysasvalue){
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 '非法字段';
}


最新内容请见作者的GitHub页:http://qaseven.github.io/
目录
打赏
0
0
0
0
14291
分享
相关文章
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
604 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
641 11
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
118 0
java springboot sql防注入的6种方式
java springboot sql防注入的6种方式
1439 1
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
605 0
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
MYSQL数据库初窥门径, SQL语句地熟练使用, 图形化界面提高效率
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等