我想知道我是否可以通过<
和>
仅替换<
和>
来保护我的网站免受XSS攻击,或者我错过了什么。< / p>
示例:
<?php echo '<div>' . $escaped . '</div>' ?>
我已经知道htmlspecialchars
PHP功能&amp;分支机构
答案 0 :(得分:1)
不,对于HTML正文,您还需要对&
字符进行编码,以防止攻击者逃脱逃逸。
查看XSS Experimental Minimal Encoding Rules: -
HTML正文(最高为HTML 4.01):
HTML实体编码
< &
在metatag中指定charset以避免使用UTF7 XSS
XHTML正文:
HTML实体编码
< & >
- 的输入
限制对charset http://www.w3.org/TR/2008/REC-xml-20081126/#charsets
请注意,如果要在属性值中输入内容,则需要对具有特殊含义的所有字符进行正确编码。 XSS (Cross Site Scripting) Prevention Cheat Sheet提及对以下字符进行编码: -
&
,<
,>
,"
,'
,/
您还必须引用转义的属性值才能生效。
答案 1 :(得分:0)
答案是否定的,不知怎的,有人会找到利用它的方法。
你低估了技术的数量和攻击者的创造力。阅读OWASP XSS备忘单https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet,了解这种情况可能发生的方式。在您的情况下,它是否可以防止XSS成为onload属性?或者成为一个输入,成为CSS定义的一部分?在这些情况下,您已经进入了隐式标记,因此您只需要添加JS代码,没有理由使用&#39;&lt;&#39;或&#39;&gt;&#39;
使用XSS进行输出验证,这是最简单的事情,它会保护你到处都是,只要你每次写任何东西都做(无论是否来自用户)并注意上下文(逃避) /编写链接时编码一个URL,直接编写JS脚本时为JS编译转义/编码,编写CSS定义的一部分时转义/编码为CSS,编写JSON时转义/编码JSON数据,在任何其他情况下转义/编码HTML。)
此外,即使它是无关的,我通常也会指向这个网站,以展示人们如何对JS http://www.jsfuck.com/发挥创意 - 这只是混淆,但我用它来逃避反... XSS控制,通常由第三方制作。