没有HTML标记的XSS

VMO*_*ega 4 html security xss

如果我的输入不允许<和>字符,可以进行XSS攻击吗?

Example: I enter <script>alert('this');</script> text
Run Code Online (Sandbox Code Playgroud)

但如果我删除<和>脚本不是文本:

I enter script alert('this'); script text
Run Code Online (Sandbox Code Playgroud)

Sil*_*Fox 9

是的,它仍然可能.

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

<img src="http://example.com/img.jpg" alt="USER-INPUT" />
Run Code Online (Sandbox Code Playgroud)

如果USER-INPUT" ONLOAD="alert('xss'),这将呈现

<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />
Run Code Online (Sandbox Code Playgroud)

无需角括号.

另外,请查看OWASP XSS实验最小编码规则.

对于HTML正文:

HTML实体编码<&

在metatag中指定charset以避免使用UTF7 XSS

对于XHTML正文:

HTML实体编码<&>

限制输入到charset http://www.w3.org/TR/2008/REC-xml-20081126/#charsets

因此,在体内,您只需编码(或删除)通常建议用于防止XSS的字符子集.但是,您无法在属性中执行此操作 - 完整的XSS(跨站点脚本)预防备忘单建议以下内容,并且它们没有最小的替代方法:

除字母数字字符外,使用HTML实体&#xHH;格式转义所有字符,包括空格.(HH =十六进制值)

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

  • 非上市
  • 单引号
  • 双引号

在这三种情况下,以这种方式编码将阻止属性值中的XSS.

还要小心,UTF-7攻击不需要尖括号字符.但是,除非将字符集明确设置为UTF-7,否则在现代浏览器中无法进行此类攻击.

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
Run Code Online (Sandbox Code Playgroud)


won*_*nce 5

如果用户提供的输入打印在 HTML 属性内,您还需要转义引号,否则您的输入将容易受到攻击,如下所示:

" onload="javascript-code" foobar="
Run Code Online (Sandbox Code Playgroud)

您还应该转义 & 字符,因为它通常需要在 HTML 文档中进行编码,否则可能会破坏您的布局。

所以你应该注意以下字符:< > & ' "

然而,您不应该完全删除它们,而是用正确的 HTML 代码替换它们,即<< > & ” '