【发布时间】:2011-05-31 14:27:02
【问题描述】:
已知的 Style Attribute XSS 攻击如下:
<DIV STYLE="width: expression(alert('XSS'));">
或者
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
I've seen 的所有示例都使用表达式或 url 功能 - 基本上类似的功能需要“(”和“)”。
我正在考虑以下过滤样式标签的方法,我会使用以下(大约)语法检查它们:
identifier: [a-zA-Z_][a-zA-Z0-9\-]*
number: [0-9]+
string: '[a-zA-Z_0-9 ]*'
value : identifier | number | string | number + "(em|px)" | number +"%"
entry: identifier ":" value (\s value )*
style: (entry ;)*
所以基本上我允许 ASCII 属性具有数值或非常有限的字符串值(基本上用于字体名称),不允许使用任何看起来像 call 的东西。
问题是否足够好?是否有任何攻击可能会做类似的事情:
<DIV STYLE="this-is-js-property: alert 'XSS';">
成功了吗?
谁能想到这种测试的 XSS 漏洞?
明确说明
我需要样式属性,因为 TinyMCE 等许多工具都使用它们并过滤无害 关闭样式属性会严重损害功能。
所以我更喜欢通过常见情况删除所有可能使用@import、url、表达式等的东西。同时确保基本的 css 语法没问题。
回答
不,由于点击劫持漏洞,它不安全。
【问题讨论】:
-
干得好,很多都不知道
-
有复杂的html白名单过滤框架,如github.com/owasp/java-html-sanitizer。有足够时间的熟练攻击者总能找到击败黑名单过滤器的方法。
标签: javascript html coding-style xss