如果我正在使用mysql_real_escape_string
和addslashes
来避免我的网站中出现sql注入攻击这两个就足以阻止SQL注入,那么它100%确定现在没有人可以使用SQL注入攻击吗?
答案 0 :(得分:4)
这取决于您的查询;如果您只是在谈论要在数据库中插入的值,mysql_real_escape_string
就足够了,您就不需要addslashes
。
如果你也在谈论变量表或列名,那么你需要白名单以及mysql_real_escape_string
不会阻止对它们进行sql注入。
所以答案真的是:不,这取决于您的查询。
答案 1 :(得分:3)
根本不要使用addslashes
;防止SQL注入是不合适的。
仅使用mysql_real_escape_string
。如果您需要更改字符编码,请使用mysql_set_charset
。
答案 2 :(得分:2)
没有任何简单的“神奇”方法来阻止SQL注入。 mysql_real_escape_string
是一个好的开始,使用PDO(docs)会更好。最重要的是,您需要查看数据库结构,查看查询,查看数据源,然后仔细考虑。数据来自哪里?如果数据不符合我的预期,会发生什么?
应该创建代码的整个结构,以控制应用程序逻辑的流程。防止SQL注入的最佳方法是保持意识并控制数据库中的内容。
答案 3 :(得分:1)
你永远不应该使用addslashes
。坚持使用mysql_real_escape_string
无论如何只有死亡是肯定的。
如果你担心死亡,你应该使用PDO来减少漏洞
答案 4 :(得分:1)
取决于你的意思,我想。
仅仅使用mysql_real_escape_string并不能100%确定地保护您,如果没有其他原因可以正确使用它。
另一方面,正确使用mysql_real_escape_string可以保护你尽可能接近100%。
另一方面,与参数化查询相比,使用mysql_real_escape_string作为程序员犯错可能更容易。
如果您对您的代码不确定,可能会发布并专门询问它可能更具教育性/实用性。
另外:与其他人对addlashes的看法不一样。