Bị từ chối tải tập lệnh vì nó vi phạm chỉ thị Chính sách bảo mật nội dung sau đây


99

Khi tôi cố gắng triển khai ứng dụng của mình trên các thiết bị có hệ điều hành Android trên 5.0.0 ( Lollipop ), tôi liên tục nhận được những thông báo lỗi sau:

07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Dòng 0: Từ chối tải tập lệnh 'http: // xxxxx' vì vi phạm Nội dung sau Chỉ thị Chính sách Bảo mật: "script-src 'self' 'secure-eval' 'secure-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] "Từ chối tải tập lệnh 'http: // xxx' vì vi phạm chỉ thị Chính sách bảo mật nội dung sau:" script- src 'tự' 'không an toàn-eval' 'không an toàn-nội tuyến' ".

Tuy nhiên, nếu tôi triển khai nó cho thiết bị di động có hệ điều hành Android 4.4.x ( KitKat ), chính sách bảo mật sẽ hoạt động với các chính sách mặc định:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Sau đó, tôi nghĩ, có lẽ, tôi nên thay đổi một cái gì đó như thế này:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">

Về cơ bản, cả hai tùy chọn đều không phù hợp với tôi. Làm thế nào tôi có thể giải quyết vấn đề này?


Rất giống với vấn đề của tôi. Tôi không thể lấy một tệp JSON, "bởi vì nó vi phạm các nội dung chỉ thị chính sách an ninh như sau: 'connect-src 'tự''"
Michael R

1
@MichaelR Nếu bạn muốn truy xuất một số thông tin JSON từ API thông qua JS như addon tampermonkey hoặc mọi thứ khác Bạn có thể sử dụng plugin này chrome.google.com/webstore/detail/disable-content-security/… và tắt kiểm tra CSP trong khi bạn muốn tải xuống một cái gì đó. Nó không an toàn nhưng trong một số trường hợp, nó có thể hoạt động. Tôi đăng câu trả lời này ở đây vì tôi đang tìm lỗi của mình và chủ đề này hiển thị đầu tiên trên Google.
Eryk Wróbel

Câu trả lời:


65

Hãy thử thay thế thẻ meta của bạn bằng thẻ này bên dưới:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />

Hoặc ngoài những gì bạn có, bạn nên thêm http://*vào cả hai style-srcscript-srcnhư đã thấy ở trên, thêm vào sau 'self'.

Nếu máy chủ của bạn bao gồm Content-Security-Policytiêu đề, tiêu đề sẽ ghi đè meta.


6
Như tôi hiểu CSP mà bạn xác định ở đây vô hiệu hóa tất cả các loại bảo mật để tránh các cuộc tấn công, cho phép các thẻ tập lệnh và cũng có thể tải tập lệnh từ bất kỳ miền nào và cả qua các kết nối không an toàn. thấy developers.google.com/web/fundamentals/security/csp Hoặc Tôi có thể lấy s.th. Sai lầm? Tôi đoán rằng trong hầu hết các trường hợp (ngoại trừ phát triển và gỡ lỗi), đây không phải là điều bạn muốn ... phải không?
Peter T.


9
Tôi sẽ không tán thành câu trả lời này, bởi vì bạn đề xuất sử dụng '' không an toàn-nội tuyến '' không an toàn-eval '', điều bạn không nên sử dụng khi sử dụng CSP!
HerTesla

39

Các tự câu trả lời được đưa ra bởi MagngooSasa đã làm các trick, nhưng đối với bất cứ ai khác cố gắng để hiểu được những câu trả lời, đây là một vài chút biết thêm chi tiết:

Khi phát triển ứng dụng Cordova bằng Visual Studio, tôi đã cố gắng nhập tệp JavaScript từ xa [nằm ở đây http://Guess.What.com/MyScript.js], nhưng tôi gặp lỗi được đề cập trong tiêu đề.

Đây là thẻ meta trước đây , trong tệp index.html của dự án:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Đây là thẻ meta đã sửa chữa , để cho phép nhập tập lệnh từ xa:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

Và không còn lỗi nữa!


14

Nó đã được giải quyết bằng:

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';

46
bạn có thể vui lòng giải thích nó thêm một chút không? Bạn có thể dán toàn bộ meta không?
Tony


1
Điều này vô hiệu hóa hiệu quả CSP cho các tập lệnh bằng cách cho phép bất kỳ plugin / xss độc hại nào đưa các tập lệnh nội tuyến và đánh giá, điều này đánh bại toàn bộ mục đích của việc bật CSP.
IncredibleHat

7

Chúng tôi đã sử dụng cái này:

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">

7

Đối với bất kỳ ai đang tìm kiếm lời giải thích đầy đủ, tôi khuyên bạn nên xem Chính sách bảo mật nội dung: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .

"Mã từ https://mybank.com chỉ nên có quyền truy cập vào https://mybank.com dữ liệu‘s, và https://evil.example.com nên chắc chắn không bao giờ được phép truy cập. Mỗi gốc được giữ phân lập từ phần còn lại của web "

Các cuộc tấn công XSS dựa trên việc trình duyệt không có khả năng phân biệt mã ứng dụng của bạn với mã được tải xuống từ một trang web khác. Vì vậy, bạn phải liệt kê các nguồn gốc nội dung mà bạn cho là an toàn để tải xuống nội dung, bằng cách sử dụng Content-Security-Policytiêu đề HTTP.

Chính sách này được mô tả bằng cách sử dụng một loạt các chỉ thị chính sách, mỗi chỉ thị mô tả chính sách cho một loại tài nguyên hoặc khu vực chính sách nhất định. Chính sách của bạn nên bao gồm chỉ thị chính sách default-src, chỉ thị này là dự phòng cho các loại tài nguyên khác khi chúng không có chính sách của riêng mình.

Vì vậy, nếu bạn sửa đổi thẻ của mình thành:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

Bạn đang nói rằng bạn đang cho phép thực thi mã Javacsript ( script-src) từ nguồn gốc 'self', http://onlineerp.solution.quebec, 'unsafe-inline', 'unsafe-eval'.

Tôi đoán rằng hai cái đầu tiên hoàn toàn hợp lệ cho trường hợp sử dụng của bạn, tôi hơi không chắc về những cái còn lại. 'unsafe-line''unsafe-eval'đặt ra vấn đề bảo mật, vì vậy bạn không nên sử dụng chúng trừ khi bạn có nhu cầu rất cụ thể về chúng:

"Nếu eval và những người anh em chuyển văn bản thành JavaScript của nó hoàn toàn cần thiết cho ứng dụng của bạn, bạn có thể kích hoạt chúng bằng cách thêm 'không an toàn-eval' làm nguồn được phép trong chỉ thị script-src. Nhưng, một lần nữa, xin đừng. Cấm khả năng thực thi các chuỗi khiến kẻ tấn công khó thực thi mã trái phép trên trang web của bạn hơn nhiều. " (Mike West, Google)


Tại sao trong trang localhost của tôi, tôi có thể thêm một tập lệnh máy chủ khác?
mqliutie

Nó không phải là không phổ biến để tái sử dụng các kịch bản bên thứ 3 mà không được lưu trữ trong máy chủ của bạn, nhưng trong đó bạn "tin tưởng"
Rocío García Luque

6

Chuỗi quyền đầy đủ

Các câu trả lời trước không khắc phục được sự cố của tôi, vì chúng không bao gồm blob: data: gap:các từ khóa cùng một lúc; vì vậy đây là một chuỗi thực hiện:

<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">

Cảnh báo: Điều này cho thấy tài liệu bị khai thác nhiều. Đảm bảo ngăn người dùng thực thi mã trong bảng điều khiển hoặc trong môi trường đóng như ứng dụng Cordova .


1
Đây là câu trả lời chính xác nếu bạn đang cố tải ví dụ như JQuery trong bảng điều khiển như thế này: stackoverflow.com/a/31912495/137948
Will Sheppard

4

Để giải thích thêm về điều này, hãy thêm

script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';

vào thẻ meta như vậy,

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval';  media-src *">

sửa lỗi.


2

Việc thêm thẻ meta để bỏ qua chính sách này đã không giúp ích được gì cho chúng tôi, vì máy chủ web của chúng tôi đã đưa Content-Security-Policytiêu đề vào phản hồi.

Trong trường hợp của chúng tôi, chúng tôi đang sử dụng Ngnix làm máy chủ web cho ứng dụng Tomcat 9 dựa trên Java. Từ máy chủ web, nó hướng trình duyệt không cho phép inline scripts, vì vậy để thử nghiệm tạm thời, chúng tôi đã tắtContent-Security-Policy bằng cách nhận xét.

Cách tắt nó trong ngnix

  • Theo mặc định, tệp ngnix ssl.conf sẽ có thêm tiêu đề vào phản hồi:

    #> grep 'Content-Security' -ir /etc/nginx/global/ssl.conf add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; script-src 'self'; img-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';";

  • Nếu bạn chỉ nhận xét dòng này và khởi động lại ngnix, nó không nên thêm tiêu đề vào phản hồi.

Nếu bạn lo lắng về bảo mật hoặc trong quá trình sản xuất, vui lòng không làm theo điều này, hãy sử dụng các bước này chỉ cho mục đích thử nghiệm và tiếp tục.


-1

Lý do có thể xảy ra tại sao bạn gặp lỗi này có thể là do bạn đã thêm / xây dựng thư mục vào tệp .gitignore của mình hoặc nói chung là chưa kiểm tra nó vào Git.

Vì vậy, khi bạn Git đẩy Heroku master, thư mục xây dựng mà bạn đang tham chiếu sẽ không được đẩy sang Heroku. Và đó là lý do tại sao nó hiển thị lỗi này.

Đó là lý do tại sao nó hoạt động đúng cục bộ, nhưng không phải khi bạn triển khai lên Heroku.


Tôi có cùng một vấn đề. vậy bạn có đề xuất xóa / xây dựng thư mục khỏi .gitignore không?
Hoàng Minh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.