是的,这仍然是可能的。
例如假设您的网站将用户输入注入以下位置
<img src="http://example.com/img.jpg" alt="USER-INPUT" />
If USER-INPUT
is " ONLOAD="alert('xss')
,这将呈现
<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />
不需要尖括号。
另外,请查看OWASP XSS 实验性最小编码规则 https://www.owasp.org/index.php/XSS_Experimental_Minimal_Encoding_Rules.
对于 HTML 正文:
HTML 实体编码
在元标记中指定字符集以避免 UTF 7 XSS
对于 XHTML 正文:
HTML 实体编码
限制输入字符集http://www.w3.org/TR/2008/REC-xml-20081126/#charsets http://www.w3.org/TR/2008/REC-xml-20081126/#charsets
因此,在正文中,您可以只对通常建议防止 XSS 的字符子集进行编码(或删除)。但是,您不能在属性中执行此操作 - 完整的XSS(跨站脚本)预防备忘单 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Output_Encoding_Rules_Summary建议如下,但他们没有最低限度的替代方案:
除字母数字字符外,使用 HTML 实体转义所有字符&#xHH;
格式,包括空格。 (HH = 十六进制值)
主要涵盖三种指定属性值的方式:
在这三种情况下,以这种方式进行编码将防止属性值中的 XSS。
还要警惕的是UTF-7 https://security.stackexchange.com/a/100863/8340攻击不需要尖括号字符。但是,除非将字符集显式设置为 UTF-7,否则此类攻击在现代浏览器中是不可能的 https://security.stackexchange.com/a/47533/8340.
+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
还要注意允许 URL 的属性,例如href
并确保任何用户输入都是有效的网址。强烈建议使用信誉良好的库来验证 URL,并使用允许列表方法(例如,如果协议不是 HTTPS,则拒绝)。尝试阻止类似的序列javascript:
还不够。