Content-Security-Policy对象-src blob

Bri*_*unt 28 google-chrome blob content-security-policy

使用内容安全策略时,我尝试使用window.URL.createObjectURL关注Chrome 41(测试版)中的过程,我收到如下错误:

拒绝从'blob:http%3A // localhost%3A7000/f59612b8-c760-43a4-98cd-fe2a44648393'加载插件数据,因为它违反了以下内容安全策略指令:"object-src blob://*"

使用内容安全策略限制object-src或以其他方式default-src可以重现问题(为方便起见使用jQuery),如下所示:

blob = new Blob(
   ["%PDF-1.\ntrailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>"],
   { type: "application/pdf" })
$("<embed>").attr("src", window.URL.createObjectURL(blob))
  .appendTo(document.body)
Run Code Online (Sandbox Code Playgroud)

规范看来,这应该起作用,就像它一样data://*.我曾尝试也blob,blob:,blob:*,blob:http*,blob:http:*,blob:http://*,但无济于事.

什么工作,但由于明显的原因是不可取的,是object-src *.

有没有人在使用内容安全策略加载blob方面有什么成功?这是上游的问题,还是我忽略了什么?

Adr*_*ria 44

符合规范的答案是 object-src 'self' blob:

blob:应该只blob:显式匹配,而不是'self'*.这是Chrome中的一个错误,最近在Firefox 40中已修复.


gri*_*gno 7

对于Chrome 47.0.2526.73:

default-src*blob:;

为我工作

  • 如果默认情况下每个域都允许,为什么需要CSP? (4认同)
  • 正如 Joao 指出的那样**这基本上使 CSP 完全失效**。如果您没有明确定义**所有**其他规则,例如“connect-src”、“frame-src”等,很可能会给出[其中有 16 个](https://developer.mozilla. org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/default-src),将应用此“default-src *”。这意味着,例如,在您的页面中注入脚本的黑客将能够运行来自任何其他域的代码。如果您不想获得更细粒度但仍提供一定程度的安全性,则 `object-src 'self' blob:` 是更好的选择 (4认同)