10

看完这篇文章,我没有一个明确的答案:

http://palizine.plynt.com/issues/2010Oct/bypass-xss-filters/

  • 浏览器会将 text/html 数据 URI 有效负载解释为执行标签<img> src的文档吗?<script>

  • 如果不是,那么在第三方 HTML 中允许数据 URI 是否安全?

  • 对于这个用例,浏览器级别存在哪些安全机制?

4

2 回答 2

9

MSDN 文档说 IE 没有:

出于安全原因,数据 URI 仅限于下载的资源。数据 URI 不能用于导航、脚本或填充框架或 iframe 元素。

另一方面,Mozilla 确实允许iframe脚本执行:

数据:继承其引荐来源的网址允许它们用于生成或窗口内容,父可以与之交互。Gecko 一直都是这样做的(我们有很多分散在各处的安全检查,不得不担心它)。

SafariChromium沙箱数据 URI 执行,有效地将它们视为跨域请求。

我们目前将 data: URIs 标记为无法访问任何其他来源,包括其他 data: URIs。

HTML5 规范规定:

如果从数据生成文档或图像:作为 HTTP 重定向的位置返回的 URL(或其他协议中的等效项)

来源是重定向到数据的 URL 的来源:URL。

如果从数据生成文档或图像:在另一个文档或脚本中找到的 URL

原点是在调用导航算法时由现有设置对象指定的原点的别名,或者,如果不涉及脚本,则是启动到该 URL 的导航的元素的节点文档的别名。

如果以其他方式获取文档或图像(例如,数据:用户输入的 URL、使用 createDocument() API 创建的文档、数据:作为 HTTP 重定向位置返回的 URL 等)

来源是创建文档或图像时分配的全局唯一标识符。

RFC6454 补充道:

URI 不一定与自身同源。例如,数据 URI [RFC2397] 与自身不同源,因为数据 URI 不使用基于服务器的命名机构,因此具有全局唯一标识符作为来源。

CSSHTTPRequest使用数据 URI 来执行跨站点 GET 请求,但这是它在所有浏览器中最多可以执行的操作。

参考

于 2012-06-28T18:11:06.263 回答
1

可以通过这种方式注入数据,但需要注意的是,也可以在图像本身的二进制数据中注入数据。不管怎样,没有什么是 100% 安全的。曾经。如果您使用的是 codeigniter 框架,您可以通过以下方式非常可靠地保护自己免受此影响

   $this->security->xss_clean()

除此之外,您还可以构建您自己的脚本版本,使用正则表达式删除危险的东西。记住在构建这样的脚本时要注意不同的字符编码。

于 2012-08-24T20:16:19.210 回答