2

根据这个链接,它似乎是内联脚本,例如用于在页面中插入 recaptcha 对象,通过

<script type="text/javascript"
     src="http://www.google.com/recaptcha/api/challenge?k=your_public_key">
</script>
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=your_public_key"
     height="300" width="500" frameborder="0"></iframe><br>
<textarea name="recaptcha_challenge_field" rows="3" cols="40">
</textarea>
<input type="hidden" name="recaptcha_response_field"
     value="manual_challenge">
</noscript>

或通过

 <script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>

Recaptcha.create("your_public_key",
"element_id",
{
  theme: "red",
  callback: Recaptcha.focus_response_field
}

);

尽管我的 manifest.json 显然允许像http://www.google.com/recaptcha/api/js/recaptcha_ajax.js这样的网址,但我总是对内容安全政策有所抱怨

我是否遗漏了一些非常明显的东西,使整个问题变得疯狂?

4

3 回答 3

4

我只花了两个小时来解决这个问题。对我来说,我也认为对于这个例子,问题在于src属性;也就是说,在http:. 更改引用如下:

<script type="text/javascript" 
     src="https://www.google.com/recaptcha/api/challenge?k=your_public_key">
              ^  v
<iframe src="https://www.google.com/recaptcha/api/noscript?k=
     height="300" width="500" frameborder="0"></iframe>

解决了这个问题。基本上,您试图通过不安全的连接访问 google api,并且某些浏览器(例如 Chrome)默认情况下不会呈现不安全的内容。

于 2012-10-30T16:51:54.287 回答
1

http在 Chrome 扩展程序中,不能通过 CSP将非安全项列入白名单。
该文档指出:

放宽默认策略

(...) 另一方面,如果您需要一些外部 JavaScript 或对象资源,您可以通过将应接受的脚本的特定 HTTPS 来源列入白名单,在有限程度上放宽政策。将不安全的 HTTP 资源列入白名单将不起作用。 这是有意的,因为我们希望确保加载了扩展的提升权限的可执行资源正是您期望的资源,并且没有被活跃的网络攻击者替换。由于中间人攻击在 HTTP 上是微不足道且无法检测到的,因此仅接受 HTTPS 来源。

于 2012-05-10T19:49:07.737 回答
0

您应该将所有资源调用协议设为相对 url。基本上删除任何 http: 或 https: 并使用 //

更多信息在这里 http://www.paulirish.com/2010/the-protocol-relative-url/

在 <script src="http://..."> 中用 // 替换http :// 是否有效?

于 2015-03-12T16:13:57.857 回答