已知的样式属性 XSS 攻击如下:
<DIV STYLE="width: expression(alert('XSS'));">
或者
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
我见过的所有示例都使用表达式或 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语法是好的。
回答
不,由于点击劫持漏洞,它不安全。
点击劫持漏洞,这不起作用。
示例:
<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
代码将得到完美验证,但可能会造成严重损坏。因此 - 经验法则使用非常严格的白名单或不允许样式属性。
OWASP 的开放基金会可以帮助您解决此问题。
回答你的问题Are there any attacks....
;是的!那里有大量的文档,并且有一些库可以用来正确转义所有 XSS 代码。
阅读
XSS 预防表。
这些样式被注入,因为我们没有在特定 jsp 页面的标签中声明它们,但在我们的安全组审核时通过了:
<img src="<path here>" style=x:ex/**/pression
(alert(54163)) ".gif"
我正在考虑使用 HTTP 过滤器来阻止它,但我仍在研究它。
我们也没有保护隐藏的输入字段,这也成功了:
<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert
(54163)) "">
使用 Burpsuite 这样的工具,您可以动态修改请求以将 XSS 注入到这样的标签中。但是,使用 OWASP 的 ESAPI API,您可以添加保护。我们没有使用 JSTL 标签,因为它是旧的遗留代码,所以这是最好的短期解决方案。
对于我使用的隐藏输入;
<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>"
您还可以将
XSS 与 img 标签中的 js onload 事件一起使用:
你想实现什么目标?哪些功能会导致 CSS 来自不受信任的来源?