【问题标题】:Is there a way to execute javascript from inside a css file ?有没有办法从css文件中执行javascript?
【发布时间】:2018-01-10 08:27:35
【问题描述】:

我只能访问我可以修改的 css 文件。我有很多修改要做,我想知道是否有办法从 CSS 文件中执行 javascript 代码。

我确实发现了一个旧漏洞,该漏洞不再在最新的浏览器中得到支持。 http://dougrathbone.com/blog/2013/10/30/executing-javascript-inside-css-another-reason-to-whitelist-and-encode-user-input

如您所见,该漏洞是通过从另一个 url 调用任意代码来利用的,例如

body {
    behavior:url(/user/uploadedfiles/evil-uploaded-component.htc);
    }

现在,我想知道是否有其他方法可以做到这一点?

【问题讨论】:

标签: javascript jquery html css security


【解决方案1】:

IE 和 Firefox 都包含从 CSS 执行 JavaScript 的方法。正如 Paolo 所提到的,IE 中的一种方式是表达式技术,但也有更模糊的 HTC 行为,其中包含您的脚本的单独 XML 通过 CSS 加载。存在用于 Firefox 的类似技术,使用 XBL。这些技术并不直接从 CSS 执行 JavaScript,但效果是一样的。

HTC 与 IE

使用这样的 CSS 规则:

body {
  behavior:url(script.htc);
}

并且在该 script.htc 文件中有类似的内容:

<PUBLIC:COMPONENT TAGNAME="xss">
   <PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="main()" LITERALCONTENT="false"/>
</PUBLIC:COMPONENT>
<SCRIPT>
   function main() 
   {
     alert("HTC script executed.");
   }
</SCRIPT>

HTC 文件对事件ondocumentready 执行main() 函数(指的是HTC 文档的就绪情况。)

XBL 与 Firefox

Firefox 使用 XBL 支持类似的 XML 脚本执行 hack。

使用这样的 CSS 规则:

body {
  -moz-binding: url(script.xml#mycode);
}

在您的 script.xml 中:

<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">

<binding id="mycode">
  <implementation>
    <constructor>
      alert("XBL script executed.");
    </constructor>
  </implementation>
</binding>

</bindings>

将执行构造函数标记中的所有代码(将代码包装在 CDATA 部分中是个好主意。)

在这两种技术中,除非 CSS 选择器匹配文档中的元素,否则代码不会执行。通过使用body 之类的内容,它将在页面加载时立即执行。

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2010-10-13
    • 2020-02-14
    • 2021-10-23
    相关资源
    最近更新 更多