如果我在我的网站上使用mysql_real_escape_string
和addslashes
来避免sql注入攻击,这两个是否足以阻止SQL注入,所以它100%确定现在没有人可以使用SQL注入攻击?
发布于 2011-06-02 02:21:19
这取决于您的查询;如果您只讨论要在数据库中插入的值,mysql_real_escape_string
就足够了,您不需要addslashes
。
如果您还在讨论变量表或列的名称,那么您将需要使用白名单,并且mysql_real_escape_string
将不会阻止在这些列表上进行sql注入。
所以答案实际上是:不,这取决于你的查询。
发布于 2011-06-02 02:20:58
根本不要使用addslashes
;它不适合防止SQL注入。
仅使用mysql_real_escape_string
。如果需要更改字符编码,请使用mysql_set_charset
。
发布于 2011-06-02 02:27:21
没有任何简单的“神奇”方法来防止SQL注入。mysql_real_escape_string
是一个很好的开始,使用PDO (docs)更好。最重要的是,你需要看看你的数据库结构,看看你的查询,看看你的数据源,然后想清楚。数据从何而来?如果数据不是我所期望的,会发生什么?
在创建代码的整个结构时,应该考虑到控制应用程序逻辑的流程。防止SQL注入的最好方法是保持对数据库中内容的感知和控制。
https://stackoverflow.com/questions/6205835
复制相似问题