mysql pdo预处理为什么能防止sql注入

发布时间:2022-03-16 00:09:35 阅读:1521次

mysql pdo预处理能防止sql注入的原因:

1、先看预处理的语法

$pdo->prepare('select * from biao1 where id=:id');
$pdo->execute([':id'=>4]);

2、语句一,服务器发送一条sql给mysql服务器,mysql服务器会解析这条sql。

语句二,服务器发送一条sql给mysql服务器,mysql服务器不会解析这条sql,只会把execute的参数当做纯参数赋值给语句一。哪怕参数中有sql命令也不会被执行,从而实现防治sql注入。

注意:为了让mysql服务器去拼凑sql,而不是web server去拼凑,必须在创建pdo对象的时候加个参数:

这个参数叫模拟prepare,默认是TRUE,意思是让web server代替mysql去做prepare,达到模拟prepare的作用。(web server实现模拟prepare的原理其实也就是底层用系统函数自行拼凑sql,和手动拼凑没区别,所以还是会把危险的sql拼凑进去,然后给mysql服务器执行,依然会被sql注入)

PDO 有三个重要的参数都是默认为 true 的,会存在安全隐患

PDO::ATTR_EMULATE_PREPARES              // 启用或禁用预处理语句的模拟
PDO::ATTR_ERRMODE                         // 错误报告
PDO::MYSQL_ATTR_MULTI_STATEMENTS        // 多语句查询

所以必须设置为FALSE。

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

https://www.cnblogs.com/alazalazalaz/p/6056393.html
https://blog.csdn.net/CSDNiamcoming/article/details/116764635

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:mysql pdo预处理为什么能防止sql注入 出自老鄢博客 | 欢迎分享