我真的很想使用这个函数..并且在找到它之前使用了preg_replace和addslashes。
我很好奇,因为我即将通过,并在我的第一个大型应用程序中加强发布区域的安全性,并且想知道这个功能有效的最佳实例,并且强烈推荐。我已经看到这个函数应用于几个不同的情况,而不仅仅是在用户输入发布之前..但是当查询一般完成时,所以我真的很好奇它的全部可能性,以及如何实现它的全部效果。
此外,任何绝对可靠的安全方法和建议都将非常受欢迎。
干杯!
答案 0 :(得分:14)
理想情况下,永远不会使用它,因为Parameterized queries(通过PDO或mysqli)是防止SQL注入的正确方法。
答案 1 :(得分:4)
您应该使用mysqli_real_escape_string或PDO来绑定参数。其中任何一个的主要用途是转义单引号和双引号等字符。这通常是为了防止SQL injection。
答案 2 :(得分:3)
使用mysql_real_escape_string()的最佳建议时间:每当您将数据放入数据库时。如果您将来自任何地方(从网页,从数据库,从网络服务中)的输入视为必须保护并过滤问题的恶意攻击,那么您就不会出错了
前几次用硬盘做,然后使用一个框架(我使用ZendFramework),或者至少有一部分像Zend_DB,让自己更容易。
对于绝对可靠的安全方法 - 无法分解的服务器:
注意:此时无法保证其有用性。虽然它非常安全。不是100%,而是它会得到的好。
继续学习安全性和最佳实践。
答案 3 :(得分:2)
请不久前看到对类似问题的回复。
基本上,安全性不仅仅是避免SQL注入攻击。此外,无论何时对包含任何类型的动态数据的数据库运行查询,都存在SQL注入的危险。最后,最好将Prepared Statements与PDO库一起使用,而不是使用mysql_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函数与数据库包装器一起使用。这使得它们可以在合适的时间使用,当您切换时,您的应用程序不会崩溃