Cordova CSP拒绝本地服务器

时间:2019-07-12 10:50:29

标签: javascript node.js cordova socket.io content-security-policy

我的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:*" />

我尝试连接到套接字io实例,并且连接成功,但是在控制台中总是出现以下错误:

  

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

此后,我尝试将content-server 192.168.178.52:8091添加到我的index文件的meta标签中,但没有成功。我还尝试将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 个答案:

答案 0 :(得分:0)

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

<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'">