什么时候最推荐使用mysql_real_escape_string()

时间:2009-04-07 02:10:19

标签: php mysql security

我真的很想使用这个函数..并且在找到它之前使用了preg_replace和addslashes。

我很好奇,因为我即将通过,并在我的第一个大型应用程序中加强发布区域的安全性,并且想知道这个功能有效的最佳实例,并且强烈推荐。我已经看到这个函数应用于几个不同的情况,而不仅仅是在用户输入发布之前..但是当查询一般完成时,所以我真的很好奇它的全部可能性,以及如何实现它的全部效果。

此外,任何绝对可靠的安全方法和建议都将非常受欢迎。

干杯!

8 个答案:

答案 0 :(得分:14)

理想情况下,永远不会使用它,因为Parameterized queries(通过PDOmysqli)是防止SQL注入的正确方法。

答案 1 :(得分:4)

您应该使用mysqli_real_escape_stringPDO来绑定参数。其中任何一个的主要用途是转义单引号和双引号等字符。这通常是为了防止SQL injection

答案 2 :(得分:3)

使用mysql_real_escape_string()的最佳建议时间:每当您将数据放入数据库时​​。如果您将来自任何地方(从网页,从数据库,从网络服务中)的输入视为必须保护并过滤问题的恶意攻击,那么您就不会出错了

前几次用硬盘做,然后使用一个框架(我使用ZendFramework),或者至少有一部分像Zend_DB,让自己更容易。

对于绝对可靠的安全方法 - 无法分解的服务器:

  1. 断开机器与网络的连接
  2. 断开机器电源
  3. 将机器放入保险箱
  4. 将它放入Marianas战壕
  5. 发布一名警卫。
  6. 注意:此时无法保证其有用性。虽然它非常安全。不是100%,而是它会得到的好。

    继续学习安全性和最佳实践。

答案 3 :(得分:2)

请不久前看到对类似问题的回复。

基本上,安全性不仅仅是避免SQL注入攻击。此外,无论何时对包含任何类型的动态数据的数据库运行查询,都存在SQL注入的危险。最后,最好将Prepared Statements与PDO库一起使用,而不是使用mysql_real_escape_string()。

1)Security of strip_tags() and mysqli_real_escape_string()

答案 4 :(得分:2)

mysql_real_escape_string(magic_quotes_gpc() ? strip_slashes($variable) : $variable)

如果你坚持不使用mysqli或PDO,那么总是。

答案 5 :(得分:1)

几乎任何时候数据中的字符都可能会弄乱查询,最明显的是引用和单引号。有一些扩展字符依赖于您当前的MySQL字符编码,也可以这样做,这就是为什么要在mysql而不是addslashes()中使用它。

答案 6 :(得分:0)

最好的方法是将内容解析为数据,而不是代码(从不执行代码)。例如,JSON(Javascript)是从客户端的服务器组装数据的一种非常简单的方法,但是您永远不应该执行它。您应该使用正则表达式解析数据以确认它是正确的并且仅包含数据。

也就是说,当你在html中接受表单数据时,通常会发生SQL注入。关键是检查导致问题的SQL保留字,即'; (单引号,分号。)您可以轻松地创建一个保留字列表并通过RegEx表达式运行它们(jQuery可能在服务器上有一些不错或C#。)我相信PHP也可以轻松地做到这一点。 CRUD(创建检索更新和删除)动词很好寻找,但不要忘记服务器端SQL存储过程已经存在的事情或更糟糕的执行sql语句(动态sql)。如果您不需要在网页外使用它们,也可以对“转义”字符进行网址编码。

答案 7 :(得分:0)

我在哪里使用它: 我在我的网站中使用数据库层,该层遍历所有查询输入并将其转义。这样,未发送到数据库的输入不会被转义,但发送到数据库的所有内容都会被转义。在数据库之间传输时,它还允许更大的灵活性。 所以我建议使用经验法则 - 将所有mysql函数与数据库包装器一起使用。这使得它们可以在合适的时间使用,当您切换时,您的应用程序不会崩溃