pdo 防注入的原理 [猜想]
声明
来源我个人的猜想 ,仅供参考!!! 欢迎指正。
每个参数被''包涵
没有绑定的
预处理绑定
没有问题,因为id是数字。mysql只提取了前面的2做条件。
'转为\' (根本原因)
上面的想破坏很简单 传个'就好了。
没有绑定的
预处理绑定
总结
- mysql把每个参数都用
''
包围了 - 将有
'
的参数转化为\'
除非能让2失效,否则sql注入几乎不存在。
其他人的说法
哪怕参数中有sql命令也不会被执行,从而实现防治sql注入
我觉得是错误的说法。
个人对预处理的理解
预处理 绑定 执行
第一条sql走过这三个流程了,到第二条同样的sql绑定 执行 (只走两步)
后面依次如此。
预处理需要一点时间,比不绑定的慢(多个同样的命令就不一定了)。
预处理和防注入没有一点关系,只是pdo把参数处理了。
晚安~~
本作品采用《CC 协议》,转载必须注明作者和本文链接
MySQL是支持原生的与处理的,只是在PHP模型层不同的框架封装的不一样而已,并且PDO处理的手段也不一样,其实底层,你可以使用MySQL的原生预处理,或者使用变量使用 引号的方式,都是可以的。至于你说的性能问题,如果是多次操作同样的SQL,只是不同的变量条件而已的话,那么预处理快很多,因为少了SQL上送的开销,以及SQL解析的开销等等。
https://www.supjos.cn/archives/89.html
@LadyKiller
第2段为什么能防注入? 抓包后我发现这两段代码的处理差别 请看上面<<总结>>。
你前部分说的是pdo的封装, 我只是单纯讨论pdo为什么能防注入;
后部分我是认同的;
手动处理数据跟pdo预处理差别其实是不大的,pdo发送预处理语句跟参数到MySQLserver,由mysqlserver进行编译拼接运行,能从根本上防注入,这是mysql提供的方法,要是不行,那就找MySQL开发者解决