一尘不染

这两个功能是否对杀菌消毒过度?

mysql

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,因为它不执行任何操作。使用这两个功能是否足以防止大多数攻击并可以在公共站点使用?


阅读 215

收藏
2020-05-17

共1个答案

一尘不染

的确如此,但是这种逃避级别可能并不适合所有情况。如果要将HTML存储在数据库中怎么办?

最佳实践表明,显示值时应转义它们,而不是逃避接收值。这样,您就可以考虑同时显示数据库中的HTML和数据库中的非HTML,无论如何,这实际上就是逻辑上属于这种代码的地方。

清理传出HTML的另一个好处是,可能会发现一个新的攻击媒介,在这种情况下,清理传入HTML不会对数据库中已有的值做任何事情,而传出清理将追溯应用,而无需执行任何特殊操作

另外,请注意strip_tags,如果所有<>都变为&lt;和,则在您的第一个函数中可能无效&gt;

2020-05-17