没有 HTML 标签的 XSS

2023-12-23

如果我的输入不允许 字符,是否有可能进行 XSS 攻击?

Example: I enter <script>alert('this');</script> text

但如果我删除 脚本就不是文本:

I enter script alert('this'); script text

是的,这仍然是可能的。

例如假设您的网站将用户输入注入以下位置

<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 = 十六进制值)

主要涵盖三种指定属性值的方式:

  • Unquoted
  • 单引号
  • 双引号

在这三种情况下,以这种方式进行编码将防止属性值中的 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:还不够。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有 HTML 标签的 XSS 的相关文章