Php 如何防止搜索表单中出现XSS?
我试图在搜索表单中阻止XSS。 我添加这个来转义HTML字符,但这不起作用。有什么想法吗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" />
$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下易受攻击。