Anti-XSS脚本不起作用,还是有更好的方法?

时间:2014-05-02 07:26:56

标签: php html security xss

我一直在努力使用某个脚本,它是PHP中使用的3个函数的功能组合,以及#34; clean"或"擦洗"以特殊字符,空格和斜杠/反斜杠的形式输入。

问题是,它似乎没有用,这真的很奇怪,因为我查看了关于它的PHP官方页面,W3schools和堆栈溢出,并没有找到它可能不起作用的答案,因为我 THINK 我有正确的功能格式。

但我可能会弄错,毕竟我是一个没有太多知识的年轻学生。

这里是我谈到的功能:

<?php       
    $data = clean_data('d/ in\ g<script>e %&*$^s #% ');

    function clean_data($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
    return $data;
    }
    echo $data;
?>

第二行'符号内的随机内容是输入(当我将其与我的表单一起使用时的结果相同),当然,它的测试实际上会有{{ 1}} function,从表单中获取数据,并将其放在另一个变量中(以不同的方式调用$_POST)。

如果有人能指出我正确的方向,我将感激不尽:)

修改 谢谢了一些非常有用的评论,我了解到我的脚本中的某些功能确实做了什么,并且在gettig指出脚本以某种方式适用于除我之外的所有人之后,让我感到很沮丧,所以如果有其他人有建议,如果有更好的通过在我的PHP脚本(例如,清理实体)中实施安全性来预防&#34;防止&#34;或至少最小化XSS攻击,这将是适当的

1 个答案:

答案 0 :(得分:1)

如果你要付出这么大的努力......你做错了。

以下是一些必须小心处理用户输入的上下文,以及正确处理它们的方法:

  1. <强> HTML 即可。发送给浏览器的用户输入的任何内容都被所述浏览器解释为HTML。因此,必须注意防止用户注入他们选择的代码。幸运的是,它非常简单。 htmlspecialchars将逃避所有必要的字符,以确保用户键入的内容是他们得到的内容。 1

  2. <强>的JavaScript 即可。有时您可能需要将变量从PHP中删除到JavaScript中。无论是否包含用户输入,您必须小心生成有效的JavaScript。幸运的是,json_encode实际上是为此而设计的。给它一个变量,它将以JavaScript完全理解的方式输出它。字符串将添加引号,其中的字符将被适当地转义。

  3. <强>的MySQL 即可。也许最有争议的,但最简单的一个是正确的!如果(并且 if)您将无法维护古代代码,您可以使用mysql_real_escape_string来清理输入并防止SQL注入,但实际上您应该使用PDO&# 39;准备好的陈述功能。与上面的json_encode一样,准备好的陈述只需要一个变量,并为你做所有艰苦的工作!

  4. <强> PHP 即可。只是...不要在用户输入中使用eval。永远。好吗?

  5. <强>击/壳牌即可。使用shell_exec和相关函数与用户输入很少见,但万一你碰巧需要它,请务必始终在escapeshellarg中包装参数。这再次处理字符串的自动引用和危险字符的转义。

  6. 总的来说,有一些内置的,简单的方法可以根据您所处的上下文来做事。没有全面的解决方案,因为上下文因其不同的规则而不同。限制用户输入的内容是不好的,特别是当它以安全的方式允许任意输入时很容易。

    1:空格仍然会折叠,就像在源代码中键入多个空格一样。这可以保留为所需的行为,或使用CSS white-space: pre-wrap;修复。还要考虑word-wrap: break-word;,以确保人们不会输入愚蠢的长词来打破你的布局。