function sanitizeString($var) { $var = stripslashes($var); $var = htmlentities($var); $var = strip_tags($var); return $var; } function sanitizeMySQL($var) { $var = mysql_real_escape_string($var); $var = sanitizeString($var); return $var; }
我从书中获得了这两个函数,作者说通过使用这两个函数,我可以更加安全地抵御XSS(第一个函数)和sql注入(第二个函子)。这些都是必要的吗?
同样为了进行清理,我使用准备好的语句来防止sql注入。
我会这样使用它:
$variable = sanitizeString($_POST['user_input']); $variable = sanitizeMySQL($_POST['user_input']);
编辑: 摆脱第一个功能的strip_tags,因为它不执行任何操作。使用这两个功能是否足以防止大多数攻击并可以在公共站点使用?
的确如此,但是这种逃避级别可能并不适合所有情况。如果要将HTML存储在数据库中怎么办?
最佳实践表明,显示值时应转义它们,而不是逃避接收值。这样,您就可以考虑同时显示数据库中的HTML和数据库中的非HTML,无论如何,这实际上就是逻辑上属于这种代码的地方。
清理传出HTML的另一个好处是,可能会发现一个新的攻击媒介,在这种情况下,清理传入HTML不会对数据库中已有的值做任何事情,而传出清理将追溯应用,而无需执行任何特殊操作
另外,请注意strip_tags,如果所有<和>都变为<和,则在您的第一个函数中可能无效>。
strip_tags
<
>
<
>