当需要mysql_real_escape_string()时?

问题描述:

mysql_real_escape_string()sprintf仅在登录页面或登录后每mysql_query需要用于防止SQL注入?当需要mysql_real_escape_string()时?

+2

请不要将'mysql_ *'函数用于新代码。他们不再被维护,社区已经开始[弃用流程](http://goo.gl/KJveJ)。请参阅[**红框**](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定,[本文](http://goo.gl/3gqF9)将有助于选择。如果你关心学习,[这里是很好的PDO教程](http://goo.gl/vFWnC)。 – 2012-06-12 16:09:39

对于任何用户提供的将要通过SQL查询运行的数据,您应该使用mysql_real_escape_string。

+2

更可能的是,你根本不应该使用'mysql_ *'。 – 2012-06-12 16:09:32

+0

截至今日,情况确实如此,两年前还不如此。 :D – JadziaMD 2012-07-10 18:04:31

每次将用户发布的数据插入到查询中或使用像PDO这样的可以执行预准备语句的数据库包装时,都应该使用mysql_real_escape_string()。这样会更好,因为他们为你做了消毒工作。

如果您正致力于您网站的整体安全性,这非常好,而且绝对必要。如果您正在寻找网站被黑客攻击的原因,但我怀疑这是通过SQL注入完成的,因为您的实际HTML代码受到了影响(或者我认为我可能是错的)。这只有在你的FTP密码存储在数据库的某个地方时才有可能。

当您不信任输入时使用它。并且永远不会信任用户输入。

您接受用户输入的任何情况下,你应该把它发送到数据库之前使用它mysqli_real_escape_string。在输入上使用trim()也是一个好主意。

+0

我认为-1是用于推荐mysql_real_escape_string。固定 – 2012-06-12 16:18:15