Cordova CSP 拒绝本地服务器

Posted

技术标签:

【中文标题】Cordova CSP 拒绝本地服务器【英文标题】:Cordova CSP declines local server 【发布时间】:2019-07-12 10:50:29 【问题描述】:

我的index.html 中有以下cordova content-security-policy:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' https: http: data: blob: 'unsafe-eval'; style-src 'self' 'unsafe-inline'">

我的config.xml 文件如下所示:

<content src="index.html" />
<plugin name="cordova-plugin-whitelist" spec="1" />

<access origin="*" />

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />

我尝试连接一个socket io实例,连接成功,但是控制台总是报如下错误:

拒绝连接到“ws://192.168.178.52:8091/socket.io/?EIO=3&transport=websocket&sid=7wM1iepvGxtcJUhcAAAB”,因为它违反了以下内容安全策略指令:“default-src 'self' https: http:数据:blob:'unsafe-eval'”。请注意,'connect-src' 没有显式设置,因此 'default-src' 用作备用。

之后,我尝试将content-server 192.168.178.52:8091 添加到我的index 文件的元标记中,但没有成功。我还尝试将ws://*/*ws://* 添加到我的config.xml(也没有成功)。

客户

socketIO.exec = io('http://192.168.178.52:8091');

服务器:

const socketIO = require('socket.io');
const server = ;
server.port = 8091;

server.start = function() 
    this.init(port);
    console.log('server running on port:' + this.port);
;

server.init = function() 
    this.io_socket = socketIO(this.port);
    this.io_socket.on('connection', function(socket) 
        console.log(socket.id); // 7wM1iepvGxtcJUhcAAAB
    );
;

一切都按预期工作,客户端控制台中的错误消息除外。感谢您的帮助。

编辑:

如果我将元标记中的'self' 属性替换为*,则根本没有错误消息,所以我认为这些更改不会影响白名单?

【问题讨论】:

【参考方案1】:

我已在index.html 中使用以下行作为元标记修复了错误消息:

<meta http-equiv="Content-Security-Policy" content="default-src ws://192.168.178.52:8091 'self' https: http: data: blob: 'unsafe-eval'; style-src 'self' 'unsafe-inline'">

【讨论】:

以上是关于Cordova CSP 拒绝本地服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的 Cordova iOS 应用程序中连接到本地 Web 服务器

将 Meteor Cordova 构建的应用程序连接到本地服务器和数据库

Cordova / Javascript 将图像从 URL 复制到本地存储中

本地主机服务器拒绝连接

如何在我自己的本地 PHP 服务器上造成拒绝服务?

阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解