我发了这两篇帖子来改进我的代码,但有人可以向我解释this php vulnerable code和this secure code之间的区别。 我知道第一个是不安全的,可以接受SQL注入而另一个没有,但为什么这种类型的编码很强?
答案 0 :(得分:1)
您的问题似乎是:
问:为什么参数化查询比“原始”查询更不容易受到攻击?
请阅读:
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
坦率地说,对于对“安全编码”感兴趣的任何人,它应该是强制阅读:
主要防御防御选项1:准备好的语句(带参数化查询)
使用带有变量绑定的预准备语句(又名 参数化查询)是所有开发人员应该首先被教授的方式 如何编写数据库查询。它们易于编写且更易于编写 理解比动态查询。参数化查询强制执行 开发人员首先定义所有SQL代码,然后传入每个代码 稍后查询的参数。这种编码风格允许数据库 区分代码和数据,无论用户输入是什么 提供。
准备好的声明可确保攻击者无法更改 查询的意图,即使攻击者插入了SQL命令。 在下面的安全示例中,如果攻击者要输入的userID tom'或'1'='1,参数化查询不会易受攻击 而是寻找一个字面上匹配整个用户名的用户名 string tom'或'1'='1。
这只是您应该注意的许多与SQL相关的问题之一。 OWASP文章列出了其他文章,并链接到许多其他重要主题。