当注入点是样式属性的值时,是否可以进行XSS攻击?

Omn*_*ity 3 html javascript css security xss

示例代码:

<!DOCTYPE html>
<html lang="en">
<head><title>XSS test page</title></head>
<body>
<p>
<?php
  $style = htmlspecialchars($_GET['style']);
  echo '<div style="'.$style.'">This is a style test</div>';
?>
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

是否有可能只使用正确转出的html样式属性注入javascript代码?

我听说可以通过CSS触发XSS攻击(Source 1,Source 2).

我想知道这是否也可以通过style属性实现.

GNi*_*i33 7

我已经在问题的评论部分指出了这一点,但我认为它更适合作为一个实际的答案.

CSS

除了实际的XSS威胁之外,将用户输入传递到页面上的样式标记会为攻击者打开一整套其他机会,有些只是使用普通的css.

通过将元素设置为position: absolute;,可以用它覆盖整个页面.这可以用于使其无法使用(opacity:0;例如)或攻击者可以将其用于整个页面的污损.通过使用像CSS3的属性:before:after,他们甚至能够通过CSS把你的页面上的内容.

另一个结果可能是"click-jacking",这实际上已经在StackOverflow上进行了讨论.

XSS

说到纯XSS,在现代浏览器上使用它很难,但我不会说这是不可能的.无论如何,在旧版浏览器上,例如Internet Explorer 7,这可能会被用于攻击.有一些非常有创意的XSS-Injections,它们以最疯狂的方式进行模糊处理和解码,以超越输入验证,这仍然可以在几个(现在的)旧浏览器上成功,因为它们仍在解析它.考虑到这一点,在现代浏览器上,事情变得更好.

另外,在那里有类似expression()和的功能background-image:url,这使得旧版本的Firefox,IE7和旧版本以及可能的其他浏览器的CSS中的脚本执行成为可能.

OWASP XSS预防小抄实际列出的例子,而这些功能在样式中使用-标签和作风-属性.

无脚本攻击(也可能适用于现代浏览器!)

抛开旧的浏览器和XSS,还有其他可能适用的方法,主要是"无脚本攻击".详细介绍会扩大范围,但有关此主题精彩演示,提供了几种方法和良好的示例,说明现代浏览器是如何受到影响的.另一个例子是这篇博客文章,其中CSS用于跨站点请求伪造.(非常感谢@BenjaminGruenbaum提供链接)

最后,为了深入了解聪明的攻击者在脚本插入方面有多疯狂,我建议浏览http://www.thespanner.co.uk/.例如,在样式属性上甚至有一个非常疯狂的XSS示例,据称可以在"IE7和Firefox(没有给出版本)"上工作.

因此,在做这样的事情时要特别注意,人们可能仍然会找到方法......