内容安全政策:在新(弹出)窗口中加载Google地图

时间:2014-08-15 04:15:03

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

在我的Chrome扩展程序中,当用户点击浏览器操作符号时,会打开一个新的(弹出窗口)窗口,其中会加载Google地图。要打开窗口,我使用以下代码段

chrome.browserAction.onClicked.addListener(function() {
  chrome.windows.create({'url': 'popup.html', 'width': 500, 'height': 400 });
});

popup.html如下所示:

<!doctype html>
<html>
  <head>
    <title>Popup</title>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=true"></script>
    <script src="popup.js"></script>
  </head>
  <body>
    <div id="map-canvas" style="width:100%; height:100%"></div>
  </body>
</html>

我自然遇到了内容安全策略(CSP)问题。作为解决方案,我找到了this Stackoverflow文章。但是,它并没有开箱即用。我得到了更多&#34;拒绝加载脚本......&#34; CSP错误消息。只有通过所有必需的脚本扩展CSP行,我才能最终运行:

"content_security_policy": "script-src 'self' 'unsafe-eval' https://maps.googleapis.com https://maps.gstatic.com https://mts0.googleapis.com https://mts1.googleapis.com; object-src 'self';"

现在我想知道,如果这是正确的方法。我怎么知道所需的https网址列表不会随着时间的推移而改变?我尝试过通配符(https://*/*),但这完全被轰炸了。或许我完全使用拧干方法。

1 个答案:

答案 0 :(得分:3)

无法保证Google地图将从哪些域加载脚本。如果您需要使用更宽松的CSP规则,它将如下所示:

script-src 'self' 'unsafe-eval' https:;

https:表示可以从任何域加载,但必须通过SSL加载。这不是一个理想的CSP规则集,因为它更容易受到JavaScript安全问题的影响。