假设用户可以定义style
属性的内容,但是以一种受限的方式。它们无法突破其价值,因为白名单解析器将删除以这种方式产生的任何不安全的属性/标签。
style
他们可以仅使用现代浏览器中的属性值来执行 XSS吗?
“现代”是 IE10+ 和其他浏览器的最新版本。
假设用户可以定义style
属性的内容,但是以一种受限的方式。它们无法突破其价值,因为白名单解析器将删除以这种方式产生的任何不安全的属性/标签。
style
他们可以仅使用现代浏览器中的属性值来执行 XSS吗?
“现代”是 IE10+ 和其他浏览器的最新版本。
我到处搜索它,但我认为所有现代浏览器都可以安全地从 XSS 到 CSS。尽管我进行了一项特定的测试,但它已在我的 Chrome(可能还有其他浏览器)中执行
如果您的应用程序天真地将任何输入注入到<style>...</style>
这个有趣的场景中,可能会发生:
<html>
<head>
<style>
p {
text-align: center;
color: red;
/*user can inject here*/
}</style><script>alert()</script>
}
</style>
</head>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
...
或者
p {
/*injecting into bg's url*/
background: url("garbage"}</style><script>alert()</script>/*) repeat;
text-align: center;
color: red;
}
显然..一个 XSS
尽管现代浏览器默认不提供诸如此类的危险技巧behavior: url('some.htc')
,但如果您使用X-UA-Compatible
标题或元标记来强制 Microsoft Internet Explorer 处于不同的呈现模式,或者如果您省略了文档类型声明,Internet Explorer 将使用有这些东西的旧版本的行为。
演示(注意:我无法在 IE 11 上使用它):http: //jsbin.com/siyuhika/1/