iOS拒绝连接,因为它既不出现在Connect-SRC指令中,也不出现在内容安全策略的默认SRC指令中



所以我制作了一个使用socket.io做事的电话盖上应用。
我有以下内容安全策略(CSP)

<meta http-equiv="Content-Security-Policy" content="
                                default-src * data: blob: ws: wss:;
                                style-src * 'unsafe-inline'; 
                                script-src * 'unsafe-inline' 'unsafe-eval';
                                connect-src * ws: wss:;">

当我在Safari/iOS上启动该应用时,我会收到以下错误:

Refused to connect to ws://10.0.1.63:3000/socket.io/?EIO=3&transport=websocket&sid=xTaMJwP3rVy3UnIBAAAi 
because it appears in neither the connect-src directive nor the default-src directive of the Content Security Policy.

和:

SecurityError (DOM Exception 18): The operation is insecure.

具有相同CSP的同一应用程序在Chrome/Android上工作正常,但在Safari/ios上不行。
我认为这与:
有关精致的内容安全策略(WebKit)

似乎有很多资源:

  • 由于内容安全策略,休息室无法在HTTP上使用Safari V10中的执法
  • iOS 10.0上没有发送请求

为什么要说"拒绝连接到"从WS开始的URL:",因为它既不出现在Connect-SRC指令中,也不出现在Content-Security-Policy的默认src指令中,即使这两者都提到了?

好吧,在此方面,Safari/iOS比Chrome/Android更严格,这一切都很好,但是它仍然需要使我允许连接。对于应用程序开发人员来说,这确实令人沮丧!解决方案?

编辑:在bugs.webkit.org上做了一个错误报告:https://bugs.webkit.org/show_bug.cgi?id=165754

好吧,这很愚蠢,但是,好的,我会保留这个答案,以便未来的人们可以看到它,而不必处理这个问题

我做错了什么是:
我有以下头:

<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src"/>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>

,但我没有注意到我有" content-security-policy"元标记两次
我知道,对吧?副本导致iOS仅采用更严格的最新iOS。删除了副本,第一次工作。

,最后是Corect代码

<head>
    <meta charset="utf-8" />
    <!--<meta http-equiv="Content-Security-Policy" 
    content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
    <meta http-equiv="Content-Security-Policy" content="
                            default-src * data: blob: ws: wss: gap://ready file://*;
                            style-src * 'unsafe-inline'; 
                            script-src * 'unsafe-inline' 'unsafe-eval';
                            connect-src * ws: wss:;">
    <meta name="format-detection" content="telephone=no" />
    <meta name="msapplication-tap-highlight" content="no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>Kerst app!</title>
</head>

遇到了相同的问题,说'拒绝连接到blob:[...],因为它没有出现在内容安全策略的Connect-SRC指令中。'。p>事实证明,(与您不同)我没有两个内容 - 安全性的实例,而是两个'Connect-src'实例,第二个丢失了'blob:'

所以非常感谢您向我朝正确的方向推动!

相关内容

最新更新