XSS 攻击和风格属性

问题描述 投票:0回答:4

已知的样式属性 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语法是好的。

回答

不,由于点击劫持漏洞,它不安全。

javascript html coding-style xss
4个回答
19
投票
由于

点击劫持漏洞,这不起作用。

示例:

<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

代码将得到完美验证,但可能会造成严重损坏。

因此 - 经验法则使用非常严格的白名单或不允许样式属性。


3
投票
有一个名为

OWASP 的开放基金会可以帮助您解决此问题。

回答你的问题

Are there any attacks....

;是的!

那里有大量的文档,并且有一些库可以用来正确转义所有 XSS 代码。

阅读

XSS 预防表


2
投票
是的,您可以使用带有Style属性的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 事件一起使用:


0
投票
安全规则#1:如果您最不怀疑,请假设存在漏洞。

你想实现什么目标?哪些功能会导致 CSS 来自不受信任的来源?

© www.soinside.com 2019 - 2024. All rights reserved.