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

时间:2015-01-03 03:18:36

标签: php post input xss

我有一个脚本,如果它存在,则返回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");

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

谢谢,

彼得

2 个答案:

答案 0 :(得分:1)

它应该可以使您的应用程序非常安全,因为除非您的库中存在故障,否则用户输入(除了用户可编辑的$ _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;
    }
}

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

答案 1 :(得分:1)

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

使用htmlentities PHP函数。

过滤或验证可以在输入上完成,但重点应始终放在输出清理上。例如,在输入时,您可能需要验证电话号码是否包含数字以及仅包含以下字符()- #

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

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

将输出

&lt;script&gt;

到页面而不是<script>标记。

查看OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet以获取更多详细信息。