如何在Cordova中为Content Security Policy添加允许的URL?
解决Cordova应用连接本地PeerJS服务器的CSP拦截问题
问题根源
你当前的CSP规则里,default-src写的是*.<my-ip>,这仅允许带前缀子域名的请求(比如abc.<my-ip>),但实际请求的是不带子域名的http://<my-ip>,还有带端口:9000的地址,这俩都不符合现有规则,所以被拦截了。另外因为没单独设置connect-src,浏览器会用default-src作为网络请求的 fallback 规则。
修改方案
可以通过两种方式修正,推荐第二种(更清晰,符合CSP最佳实践):
方案1:修正default-src规则
直接把*.<my-ip>改成<my-ip>:*,允许该IP下所有端口的请求,同时保留其他原有规则:
<meta http-equiv="Content-Security-Policy" content="default-src <my-ip>:* 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
方案2:显式设置connect-src(推荐)
单独添加connect-src规则,专门管控网络请求,这样default-src可以保持原有范围,更安全:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; connect-src <my-ip>:* 'self'; style-src 'self' 'unsafe-inline'; media-src *">
说明
<my-ip>:*表示允许该IP地址下所有端口的HTTP/WS请求,覆盖你用到的默认端口和9000端口。- 如果PeerJS还用到WebSocket连接,规则已经包含在内,因为
connect-src默认涵盖ws://和wss://协议(只要地址匹配)。
内容的提问来源于stack exchange,提问作者IvanHid
相关产品推荐
相关产品推荐

