Content-Security-Policy对象-src blob

时间:2015-02-12 01:31:56

标签: 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)

似乎来自the spec that this should work,就像data://*一样。我也尝试了blobblob:blob:*blob:http*blob:http:*blob:http://*,但无济于事。

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

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

2 个答案:

答案 0 :(得分:37)

符合规范的答案为String output = ""; Scanner scan = new Scanner(System.in); while (true) { System.out.println("[P]ast or [F]uture?"); String input = scan.nextLine().toLowerCase(); if (input.equals("p") || input.equals("f")){ output = input; break; } else { System.out.println("Please provide a valid answer."); } }

object-src 'self' blob:应该只明确匹配blob:,而不是blob:'self'。这是Chrome中的错误,最近已在Firefox 40修复。

答案 1 :(得分:6)

对于Chrome 47.0.2526.73:

default-src * blob:;

为我工作