Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止搜索表单中出现XSS?_Php_Forms_Search_Xss - Fatal编程技术网

Php 如何防止搜索表单中出现XSS?

Php 如何防止搜索表单中出现XSS?,php,forms,search,xss,Php,Forms,Search,Xss,我试图在搜索表单中阻止XSS。 我添加这个来转义HTML字符,但这不起作用。有什么想法吗 $input = htmlspecialchars($input, ENT_QUOTES); 这是我的搜索表 <form action="search.php" method="get"> <input type="text" name="q" value="search" /> <input type="submit" value="send" />

我试图在搜索表单中阻止XSS。 我添加这个来转义HTML字符,但这不起作用。有什么想法吗

 $input = htmlspecialchars($input, ENT_QUOTES); 
这是我的搜索表

<form action="search.php" method="get">
    <input type="text" name="q" value="search" />
    <input type="submit" value="send" />
</form>

您需要使用函数
htmlspecialchars()
将来自用户输入的内容输出到浏览器。最重要的是清理用户提供的输入

您也可以使用
filter\u var()


XSS通常指当有人能够将HTML插入到您的页面时,这可能发生在您输出用户输入而不首先对其进行编码时。为了防止出现这种情况,请在输出用户输入时使用htmlspecialchars()。我有时会定义两个类似的函数:

function he($s) {
    return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}
function eh($s) {
    echo he($s);
}
然后,当您要回显用户输入时,请执行以下操作:

eh($user_input);
与此相反:

echo $user_input;
根据:

。。。如果将不受信任的数据放在任何位置的标记或事件处理程序属性(如onmouseover)、CSS或URL中,则HTML实体编码不起作用。因此,即使您在任何地方都使用HTML实体编码方法,也很可能容易受到XSS的攻击。对于要将不可信数据放入的HTML文档部分,必须使用转义语法

据此:

要避免出现问题,您应该做的很简单:无论何时在外部代码中嵌入字符串,都必须根据该语言的规则对其进行转义

阅读OWASP提供的:

  • 规则#0-除非在允许的位置,否则切勿插入不受信任的数据
  • 规则#1-将不受信任的数据插入HTML元素内容之前的HTML转义
  • 规则#2-将不受信任的数据插入HTML公共属性之前的属性转义
  • 规则#3-将不受信任的数据插入JavaScript数据值之前的JavaScript转义
  • 规则#4-在将不受信任的数据插入HTML样式属性值之前,CSS转义并严格验证
  • 规则#5-将不受信任的数据插入HTML URL参数值之前的URL转义
  • 规则#6-使用为作业设计的库清理HTML标记
  • 规则#7-防止基于DOM的XSS

XSS预防并非易事。开放式Web应用程序安全项目()网站上的资源是一个很好的起点。

echo htmlentities($string,entu QUOTES,| entu HTML5,'UTF-8');是一种安全有效的方法,可以阻止对UTF-8编码网页的所有XSS攻击,但不允许任何HTML。

定义“不起作用”。预期的行为是什么?取而代之的是什么?
htmlspecialchars()
也不安全。如果页面输出未设置为UTF-7或UTF-8So,如果必须对表单操作url进行编码,我可以使用OWSAP的规则#5吗?请检查我为UTF-8发布的问题。上述代码在UTF-7下易受攻击。