易受攻击代码和安全代码之间的区别


difference between vulnerable code and secure code

我写了这两篇文章来改进我的代码,但有人能向我解释一下这个php易受攻击的代码和这个安全代码之间的区别吗。我知道第一种是不安全的,可能会受到SQL注入的影响,而另一种则不然,但为什么这种类型的编码很强?

您的问题似乎是:

Q: 为什么参数化查询比"原始"查询更不易受攻击?

请阅读:

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

坦率地说,对于任何对"安全编码"感兴趣的人来说,这应该是强制性阅读

主要防御防御选项1:准备好的语句(带参数化查询)

使用具有变量绑定的准备语句(aka参数化查询)是所有开发人员首先应该学习的方法如何编写数据库查询。它们写起来很简单,而且更容易比动态查询更容易理解。参数化查询强制开发人员首先定义所有SQL代码,然后传入每个参数。这种编码风格允许数据库区分代码和数据,而不管用户输入是什么提供。

准备好的语句可确保攻击者无法更改查询的意图,即使攻击者插入了SQL命令。在下面的安全示例中,如果攻击者输入tom"或"1"="1",则参数化查询不会受到攻击,并且而是寻找一个与整个用户名完全匹配的用户名string tom'或'1'='1。

这只是您应该注意的许多与SQL相关的问题之一。OWASP文章列出了其他内容,并提供了许多其他重要主题的链接。