<img>s XSS 上的数据 URI 是否可被利用

Are data URIs on <img>s XSS exploitable?

本文关键字:是否 URI 数据 img XSS      更新时间:2023-09-26

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

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

  • 浏览器是否会将 <img> src 中的文本/html 数据 URI 有效负载解释为执行<script>标记的文档?

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

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

MSDN 文档说 IE 不会:

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

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

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

Safari 和 Chromium 沙盒数据 URI 执行,有效地将它们视为跨域请求。

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

HTML5规范指出:

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

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

如果文档或

图像是从数据生成的:在其他文档或脚本中找到的 URL

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

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

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

RFC6454补充说:

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

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

引用

  • HTML生活标准:起源

  • RFC 6454: 网络起源概念

可以

通过这种方式注入数据,但重要的是要注意,也可以在图像本身的二进制数据中注入数据。无论哪种方式,没有什么是100%安全的。曾。如果您使用的是代码点火器框架,则可以非常牢固地保护自己免受此影响

   $this->security->xss_clean()

除此之外,可以构建您自己的此类脚本版本,该脚本仅使用正则表达式删除危险内容。请记住,在构建此类脚本时要关注不同的字符编码。