我应该用XSS过滤所有输入数据吗?


Should I XSS filter all input data?

我有一个脚本,如果存在,则返回 POST 数据,如下所示:

public function post($key){
    if(isset($_POST[$key])){
            return $_POST[$key];
        }else{
            return false;
    }
}
// Will return false if index doesn't exist
echo $this->class->post("key");

我想知道如果索引存在,是否建议过滤该函数中的所有内容(使用 XSS 库,例如 htmlpurifier)?我有一个函数,它也对获取请求执行完全相同的操作。

谢谢

彼得

它应该使您的应用程序非常安全,因为除非库中出现故障,否则任何用户输入(除了用户可编辑的 $_FILE、$_SERVER)都不会容易受到 XSS 的影响。但是,如果许多人尝试访问您的应用程序,则可能会对您的服务器性能产生不利影响。我会写一个更好的函数,这样:

public function post($key, $validate = true){
    if(isset($_POST[$key])){
            if($validate===true) {
            return validate($_POST[$key]);
            } else {
            return $_POST[$key]
        }else{
            return false;
    }
}

这样,您可以选择要验证的帖子变量。它降低了应用程序的整体安全性,但如果正确使用它,则可以将影响降至最低。

您应该清理所有输出以防止 XSS。

为此,请使用 htmlentities PHP 函数。

可以对输入进行筛选或验证,但重点应始终放在输出清理上。例如,在输入时,您可能希望验证电话号码是否包含数字,并且以下字符是否仅()- #

在输出时,您应该始终根据上下文正确清理。例如,如果输出到 HTML:

<?php
echo htmlentities("<script>")
?>

将输出

&lt;script&gt;

而不是 <script> 标记。

查看 OWASP XSS(跨站点脚本)预防备忘单以获取更多详细信息。