我应该 XSS 过滤所有输入数据吗?
Should I XSS filter all input data?
我有一个脚本 returns 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)?我有一个函数也对 get 请求执行完全相同的操作。
谢谢,
彼得
它应该可以使您的应用程序非常安全,因为除非您的库中出现故障,否则任何用户输入(除了用户可编辑的 $_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;
}
}
这样您就可以选择要验证的 post 个变量。它降低了应用程序的整体安全性,但如果正确使用它,则可以将影响降至最低。
您应该清理所有输出以防止 XSS。
为此使用 htmlentities PHP 函数。
过滤或验证可以对输入进行,但重点应始终放在输出清理上。例如,在输入时,您可能想要验证 phone 数字是否仅包含数字和以下字符 ()- #
.
在输出时,您应该始终根据上下文正确地进行清理。例如,如果输出到 HTML:
<?php
echo htmlentities("<script>")
?>
会输出
<script>
到页面而不是 <script>
标签。
查看 OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet 了解更多详细信息。
我有一个脚本 returns 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)?我有一个函数也对 get 请求执行完全相同的操作。
谢谢,
彼得
它应该可以使您的应用程序非常安全,因为除非您的库中出现故障,否则任何用户输入(除了用户可编辑的 $_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;
}
}
这样您就可以选择要验证的 post 个变量。它降低了应用程序的整体安全性,但如果正确使用它,则可以将影响降至最低。
您应该清理所有输出以防止 XSS。
为此使用 htmlentities PHP 函数。
过滤或验证可以对输入进行,但重点应始终放在输出清理上。例如,在输入时,您可能想要验证 phone 数字是否仅包含数字和以下字符 ()- #
.
在输出时,您应该始终根据上下文正确地进行清理。例如,如果输出到 HTML:
<?php
echo htmlentities("<script>")
?>
会输出
<script>
到页面而不是 <script>
标签。
查看 OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet 了解更多详细信息。