内容安全政策阻止了对*://www.google.com/recaptcha/api的请求

时间:2012-05-10 18:09:36

标签: javascript google-chrome-extension recaptcha content-security-policy

In light of this link, 它似乎是内联脚本,例如用于在页面中插入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

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

3 个答案:

答案 0 :(得分: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)默认情况下不会呈现不安全的内容。

答案 1 :(得分:1)

在Chrome扩展程序中,无法通过CSP将非安全http列入白名单 The documentation州:

  

放宽默认政策

     

(...)另一方面,如果您需要一些外部JavaScript或   对象资源,您可以在有限的范围内放宽政策   将特定的HTTPS来源列入白名单应该是脚本   公认。 白名单不安全的HTTP资源将无效。   这是故意的,因为我们希望确保可执行文件   加载了扩展程序的提升权限的资源正是如此   您期望的资源,并没有被活动网络取代   攻击者。 因为中间人的攻击既微不足道又有   通过HTTP无法检测到,只接受HTTPS来源。

答案 2 :(得分:0)

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

此处有更多信息 http://www.paulirish.com/2010/the-protocol-relative-url/

Is it valid to replace http:// with // in a <script src="http://...">?