- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我只能访问一个我可以修改的 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);
}
现在,我想知道是否有其他方法可以做到这一点?
最佳答案
IE 和 Firefox 都包含从 CSS 执行 JavaScript 的方法。正如 Paolo 所提到的,IE 中的一种方式是表达式技术,但还有更模糊的 HTC 行为,其中包含您的脚本的单独 XML 通过 CSS 加载。 Firefox 存在类似的技术,使用 XBL。这些技术并不直接从 CSS 执行 JavaScript,但效果是一样的。
带 IE 的 HTC
像这样使用 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>
constructor 标签中的所有代码都将被执行(将代码包装在 CDATA 部分中是个好主意。)
在这两种技术中,除非 CSS 选择器匹配文档中的元素,否则代码不会执行。通过使用类似 body
的东西,它将在页面加载时立即执行。
关于javascript - 有没有办法从 css 文件中执行 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183134/
我是一名优秀的程序员,十分优秀!