防御mysql注入和跨站点脚本的最佳方法

Dre*_*rew 15 php sql security xss

目前,我采用了"把所有东西扔在墙上,看看有什么方法"来阻止上述问题.以下是我拼凑在一起的功能:

function madSafety($string)
{

$string = mysql_real_escape_string($string);
$string = stripslashes($string);
$string = strip_tags($string);
return $string;

}
Run Code Online (Sandbox Code Playgroud)

但是,我确信有更好的方法可以做到这一点.我正在使用FILTER_ SANITIZE_STRING,这似乎并不完全安全.

我想我在问,你们采用哪种方法,这些方法有多成功?谢谢

tro*_*skn 35

只做很多你不太了解的事情,对你没有帮助.您需要了解注射攻击是什么,以及您应该如何以及在何处执行操作.

在要点:

  • 禁用魔法引号.他们是一个不充分的解决方案,他们混淆了问题.
  • 永远不要在SQL中直接嵌入字符串.使用绑定参数,或转义(使用mysql_real_escape_string).
  • stripslashes从数据库中检索数据时不要 unescape(例如.).
  • 当你在html中嵌入字符串时(例如,当你echo)时,你应该默认转义字符串(使用htmlentitieswith ENT_QUOTES).
  • 如果需要在html中嵌入html-strings,则必须考虑字符串的来源.如果它不受信任,您应该通过过滤器进行管道传输.strip_tags在理论上你应该使用什么,但它是有缺陷的; 请改用HtmlPurifier.

另请参阅:使用PHP清理用户输入的最佳方法是什么?


var*_*tec 10

反对SQL注入的最好方法是绑定变量,而不是将它们"注入"到字符串中. http://www.php.net/manual/en/mysqli-stmt.bind-param.php