没有HTML标记的XSS

时间:2014-03-14 02:57:12

标签: html security xss

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

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

但如果我删除&lt;和&gt;脚本不是文字:

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

2 个答案:

答案 0 :(得分:6)

是的,它仍然可能。

e.g。假设您的站点将用户输入注入以下位置

<img src="http://example.com/img.jpg" alt="USER-INPUT" />

如果USER-INPUT" ONLOAD="alert('xss'),则会显示

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

无需角括号。

另外,请查看OWASP XSS Experimental Minimal Encoding Rules

对于HTML正文:

  

HTML实体编码&lt; &安培;

     

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

对于XHTML正文:

  

HTML实体编码&lt; &安培; &GT;

     

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

因此,在体内,您只需编码(或删除)通常建议用于阻止XSS的字符子集。但是,您无法在属性中执行此操作 - 完整的XSS (Cross Site Scripting) Prevention Cheat Sheet建议使用以下内容,并且它们没有最小的替代方法:

  

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

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

  • 无报价
  • 单引号
  • 双引用

在这三种情况下,以这种方式进行编码会阻止属性值中的XSS。

还要警惕UTF-7攻击不需要尖括号字符。但是,除非将字符集明确设置为UTF-7,否则此类攻击isn't possible in modern browsers

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-

答案 1 :(得分:4)

如果用户提供的输入打印在HTML属性中,您还需要转义引号,否则您将成为易受攻击的输入:

" onload="javascript-code" foobar="

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

所以你应该注意以下几个字符:&lt; &GT; &安培; '“

但是,您应该不完全剥离它们,而是用正确的HTML代码替换它们,即&amp; lt; &安培; GT; &放大器;放大器; &安培; QUOT; &安培;#X27;