用于允许 Web 套接字的内容安全策略元标记

content-security-policy meta tag for allowing web socket

情况:phonegap serve 的自动重新加载被 content-security-policy 元标记阻止

添加内容安全策略可防止自动重新加载 phonegap serve 实用程序。这是建立在 cordova serve 之上的,但会在文件编辑时自动重新加载应用程序。它通过在 index.html 中注入 socket.io 来工作。我应该在我的 CSP 元标记中指定什么,以允许套接字连接到我的笔记本电脑。

这是我当前的 CSP 元标记:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' 192.168.0.100 * ws:* ; connect-src ws://192.168.0.100 ws:*"> 

但是在打开时,设备一直显示 "Connecting to device" 并且设备上没有收到事件。

另请注意,它开始着手删除此元标记,这意味着 cordova-plugin-whitelist 可能不会阻止它。

我遇到了类似的问题。这会影响 Cordova 5.x.x。请参阅 Nic Raboy https://blog.nraboy.com/2015/05/whitelist-external-resources-for-use-in-ionic-framework/

的博客 post

我不得不稍微调整元标记以使我的 websocket 也能连接。这是它的样子;

 <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">

要将 Web 套接字添加到安全策略中,请将 Web 套接字协议 (ws:) 添加到 connect-src 指令中。

connect-src 'self' ws:;

您可以选择将 ws: 协议添加到 default-src 并省略 connect-src。这是一个有用的示例,它可以满足大多数本地开发需求,同时仍然提供有用的安全约束。

<meta http-equiv="Content-Security-Policy"
      content="default-src 'self' data: gap: ws: ssl.gstatic.com 'unsafe-inline';">

content security policy 的文档非常好并且易​​于阅读。

如果您的 websocket 在同一个 host/port 上,那么 connect-src 'self'default-src 'self' 应该 就足够了 - 假设 browsers have implemented the changes since the CSP spec changes in https://github.com/w3c/webappsec-csp/issues/7 (PR).