一尘不染

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

php

此刻,我采用了一种“把所有东西扔在墙上,看看有什么办法”来阻止上述问题的方法。下面是我拼凑的功能:

function madSafety($string)
{

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

}

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

我想我想问的是,你们采用哪种方法,它们有多成功?谢谢


阅读 236

收藏
2020-05-26

共1个答案

一尘不染

仅仅做很多您不真正了解的事情就不会对您有所帮助。您需要了解什么是注入攻击,以及确切的方法和在何处应执行的操作。

要点:

  • 禁用魔术引号。它们是一个不足的解决方案,并且使事情变得混乱。
  • 切勿直接在SQL中嵌入字符串。使用绑定参数,或转义(使用mysql_real_escape_string)。
  • *stripslashes 从数据库中检索数据时,请 *不要使 (例如)转义。
  • 当您将字符串嵌入html中时(例如,当您使用时echo),您应该默认转义该字符串(htmlentities与一起使用ENT_QUOTES)。
  • 如果需要在html中嵌入html字符串,则必须考虑字符串的来源。如果不受信任,则应通过过滤器对其进行管道传输。strip_tags从理论上讲,您应该使用它,但是它有缺陷;请改用HtmlPurifier
2020-05-26