已知的样式属性 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 属性(主要用于字体名称)不允许使用任何看起来像调用的东西。
问题是这样就够了吗?是否有任何攻击可能会做类似的事情:
<DIV STYLE="this-is-js-property: alert 'XSS';">
成功了吗?
有人能想到这种测试的 XSS 漏洞吗?
说清楚
我需要样式属性,因为像 TinyMCE 这样的许多工具都使用它们并且过滤无害 关闭样式属性会严重损害功能。
所以我更喜欢通过常见情况删除所有可能使用@import、url、表达式等的东西。还要确保基本的 css 语法没问题。
回答
不,由于点击劫持漏洞,它不安全。
最佳答案
由于 click-jacking 漏洞,这不起作用。
例子:
<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a>
发现于:http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164
代码将得到完美验证,但可能会造成严重损坏。
所以 - 经验法则使用非常严格的白名单或不允许样式属性。
关于javascript - XSS 攻击和样式属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4546591/