2016-12-12 16 views
6

Vì vậy, tôi đã tạo ứng dụng dành cho điện thoại sử dụng socket.io để thực hiện các công cụ.
Tôi có Content-An ninh-Chính sách (CSP) sauiOS Bị từ chối kết nối vì nó xuất hiện trong cả chỉ thị connect-src cũng như chỉ thị src mặc định của Chính sách bảo mật nội dung

<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:;"> 

Khi tôi bắt đầu ứng dụng trên safari/iOS tôi nhận được lỗi sau:

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. 

VÀ:

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

Cùng một ứng dụng có cùng CSP hoạt động tốt trên Chrome/Android nhưng không hoạt động trên Safari/iOS.
Tôi nghĩ rằng đây có cái gì để làm với:
a refined content security policy (WebKit)

Tài mà dường như đưa ra rất nhiều:

Tại sao nó nói "từ chối để kết nối với "URL bắt đầu bằng ws:" bởi vì nó xuất hiện trong cả chỉ thị connect-src lẫn default-src di rective của Content-Security-Policy mặc dù nó được đề cập trong cả hai?

Ok, safari/iOS nghiêm ngặt hơn chrome/Android khi nói đến điều này, tất cả đều ổn, nhưng nó vẫn cần cho phép tôi cho phép kết nối. Điều này thực sự gây phiền toái cho nhà phát triển ứng dụng! Các giải pháp?

EDIT: Made một báo cáo lỗi trên bugs.webkit.org: https://bugs.webkit.org/show_bug.cgi?id=165754

Trả lời

8

Được rồi vì vậy đây là loại ngớ ngẩn, nhưng OK, tôi sẽ giữ câu trả lời này để mọi người trong tương lai có thể nhìn thấy nó và không phải đối phó với vấn đề này

những gì tôi đã làm sai là:
tôi đã đầu sau:

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

Và tôi không nhận thấy rằng tôi đã có thẻ meta "Content-Security-Policy" hai lần
Tôi biết đúng không? Bản sao gây ra iOS để chỉ lấy bản mới nhất nghiêm ngặt hơn. Đã xóa bản sao, làm việc lần đầu tiên.

Và cuối cùng Bộ luật 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> 
+1

Tôi chỉ làm tăng thêm là người đầu tiên "Content-An ninh-Chính sách" và không thẻ meta hai lần, và điều này được Woking cho tôi và camera giải quyết không mở cửa trong iOS . – JimiOr2

Các vấn đề liên quan