目前,我采用了"把所有东西扔在墙上,看看有什么方法"来阻止上述问题.以下是我拼凑在一起的功能:
function madSafety($string) { $string = mysql_real_escape_string($string); $string = stripslashes($string); $string = strip_tags($string); return $string; }
但是,我确信有更好的方法可以做到这一点.我正在使用FILTER_ SANITIZE_STRING,这似乎并不完全安全.
我想我在问,你们采用哪种方法,这些方法有多成功?谢谢
只做很多你不太了解的事情,对你没有帮助.您需要了解注射攻击是什么,以及您应该如何以及在何处执行操作.
在要点:
禁用魔法引号.他们是一个不充分的解决方案,他们混淆了问题.
永远不要在SQL中直接嵌入字符串.使用绑定参数,或转义(使用mysql_real_escape_string
).
stripslashes
从数据库中检索数据时不要 unescape(例如.).
当你在html中嵌入字符串时(例如,当你echo
)时,你应该默认转义字符串(使用htmlentities
with ENT_QUOTES
).
如果需要在html中嵌入html-strings,则必须考虑字符串的来源.如果它不受信任,您应该通过过滤器进行管道传输.strip_tags
在理论上你应该使用什么,但它是有缺陷的; 请改用HtmlPurifier.
另请参阅:使用PHP清理用户输入的最佳方法是什么?
反对SQL注入的最好方法是绑定变量,而不是将它们"注入"到字符串中. http://www.php.net/manual/en/mysqli-stmt.bind-param.php