SQL注入预防技术仍然容易受到攻击?

时间:2011-06-01 18:18:30

标签: php security sql-injection

如果我正在使用mysql_real_escape_stringaddslashes来避免我的网站中出现sql注入攻击这两个就足以阻止SQL注入,那么它100%确定现在没有人可以使用SQL注入攻击吗?

5 个答案:

答案 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来减少漏洞

http://it.php.net/manual/en/pdo.prepare.php

答案 4 :(得分:1)

取决于你的意思,我想。

仅仅使用mysql_real_escape_string并不能100%确定地保护您,如果没有其他原因可以正确使用它。

另一方面,正确使用mysql_real_escape_string可以保护你尽可能接近100%。

另一方面,与参数化查询相比,使用mysql_real_escape_string作为程序员犯错可能更容易。

如果您对您的代码不确定,可能会发布并专门询问它可能更具教育性/实用性。

另外:与其他人对addlashes的看法不一样。