pdo 防注入的原理 [猜想]

声明

来源我个人的猜想 ,仅供参考!!! 欢迎指正。

每个参数被''包涵

没有绑定的

pdo预防注入的原理猜想

预处理绑定

pdo预防注入的原理猜想

pdo预防注入的原理猜想

没有问题,因为id是数字。mysql只提取了前面的2做条件。

'转为\' (根本原因)

上面的想破坏很简单 传个'就好了。

没有绑定的

pdo预防注入的原理猜想

预处理绑定

pdo预防注入的原理猜想

pdo预防注入的原理猜想

总结

  1. mysql把每个参数都用''包围了
  2. 将有'的参数转化为\'

除非能让2失效,否则sql注入几乎不存在。

其他人的说法

pdo预防注入的原理猜想

哪怕参数中有sql命令也不会被执行,从而实现防治sql注入
我觉得是错误的说法。

个人对预处理的理解

预处理 绑定 执行
第一条sql走过这三个流程了,到第二条同样的sql绑定 执行 (只走两步)
后面依次如此。

预处理需要一点时间,比不绑定的慢(多个同样的命令就不一定了)。

预处理和防注入没有一点关系,只是pdo把参数处理了。

晚安~~

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

MySQL是支持原生的与处理的,只是在PHP模型层不同的框架封装的不一样而已,并且PDO处理的手段也不一样,其实底层,你可以使用MySQL的原生预处理,或者使用变量使用 引号的方式,都是可以的。至于你说的性能问题,如果是多次操作同样的SQL,只是不同的变量条件而已的话,那么预处理快很多,因为少了SQL上送的开销,以及SQL解析的开销等等。

4年前 评论

@LadyKiller

1.  
   $sql = 'select * from test where id ='.$id;
   $this->connection->query($sql);
2.
   $sql = 'select * from test where id = :id';  
   $sth = $this->connection->prepare($sql);
   $res = $sth->execute([':id' => $id]);

第2段为什么能防注入? 抓包后我发现这两段代码的处理差别 请看上面<<总结>>。

你前部分说的是pdo的封装, 我只是单纯讨论pdo为什么能防注入;

后部分我是认同的;

4年前 评论
白小二

手动处理数据跟pdo预处理差别其实是不大的,pdo发送预处理语句跟参数到MySQLserver,由mysqlserver进行编译拼接运行,能从根本上防注入,这是mysql提供的方法,要是不行,那就找MySQL开发者解决

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
87
粉丝
105
喜欢
480
收藏
717
排名:109
访问:8.7 万
私信
所有博文
社区赞助商