【问题标题】:iOS Refused to connect because it appears in neither the connect-src directive nor the default-src directive of the Content Security PolicyiOS 拒绝连接,因为它既没有出现在内容安全策略的 connect-src 指令中,也没有出现在 default-src 指令中
【发布时间】:2017-04-27 09:42:08
【问题描述】:

所以我制作了一个 phonegap 应用程序,它使用 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 上却不行。
我认为这与:
a refined content security policy (WebKit)

似乎出现了很多资源:

为什么会说“拒绝连接到以 ws 开头的 URL:”,因为它既没有出现在 Content-Security-Policy 的 connect-src 指令中,也没有出现在 Content-Security-Policy 的 default-src 指令中,即使两者都提到了?

好的,safari / iOS 在这方面比 chrome / Android 更严格,一切都很好,但它仍然需要让我允许连接通过。这对于应用程序开发人员来说真是令人沮丧!解决方案?

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

【问题讨论】:

    标签: ios cordova security webkit content-security-policy


    【解决方案1】:

    遇到同样的问题,说“拒绝连接到 blob:[...],因为它没有出现在内容安全策略的 connect-src 指令中。”。

    原来(与您不同)我没有两个 Content-Security-Policy 实例,而是两个“connect-src”实例,第二个缺少“blob:”

    非常感谢您将我推向正确的方向!

    【讨论】:

      【解决方案2】:

      好的,这有点愚蠢,但是好的,我会保留这个答案,以便将来的人们可以看到它并且不必处理这个问题

      我做错的是:
      我有以下头:

      <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 只采用最新的更严格的版本。删除了副本,第一次工作。

      最后是正确的代码

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

      【讨论】:

      • 我只添加了第一个“Content-Security-Policy”并且没有两次元标记,这对我来说是个问题,并解决了相机在 iOS 中未打开的问题。
      • 谢谢大家!你和这个人在这里:medium.com/@channaly/… 在星期五下午节省了我的一天,因为位置服务在 iOS 12 上不起作用。添加 gap://ready 解决了这个问题
      • 不是专家,但我相信它不是读取最新的一行,而是读取了最严格的一行,恰好它是最后出现的
      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 2020-12-30
      • 2020-02-27
      • 2018-12-25
      • 2021-04-15
      • 2020-04-08
      • 2020-03-22
      • 2018-11-06
      相关资源
      最近更新 更多