看完这篇文章,我没有一个明确的答案:
http://palizine.plynt.com/issues/2010Oct/bypass-xss-filters/
浏览器会将 text/html 数据 URI 有效负载解释为执行标签
<img>
src
的文档吗?<script>
如果不是,那么在第三方 HTML 中允许数据 URI 是否安全?
对于这个用例,浏览器级别存在哪些安全机制?
看完这篇文章,我没有一个明确的答案:
http://palizine.plynt.com/issues/2010Oct/bypass-xss-filters/
浏览器会将 text/html 数据 URI 有效负载解释为执行标签<img>
src
的文档吗?<script>
如果不是,那么在第三方 HTML 中允许数据 URI 是否安全?
对于这个用例,浏览器级别存在哪些安全机制?
MSDN 文档说 IE 没有:
出于安全原因,数据 URI 仅限于下载的资源。数据 URI 不能用于导航、脚本或填充框架或 iframe 元素。
数据:继承其引荐来源的网址允许它们用于生成或窗口内容,父可以与之交互。Gecko 一直都是这样做的(我们有很多分散在各处的安全检查,不得不担心它)。
Safari和Chromium沙箱数据 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 请求,但这是它在所有浏览器中最多可以执行的操作。
参考
可以通过这种方式注入数据,但需要注意的是,也可以在图像本身的二进制数据中注入数据。不管怎样,没有什么是 100% 安全的。曾经。如果您使用的是 codeigniter 框架,您可以通过以下方式非常可靠地保护自己免受此影响
$this->security->xss_clean()
除此之外,您还可以构建您自己的脚本版本,使用正则表达式删除危险的东西。记住在构建这样的脚本时要注意不同的字符编码。