Từ những gì tôi biết về CSP, điều này có vẻ đúng về mặt cú pháp. HTML5 Rocks article on CSP đồng ý với cú pháp của bạn, nói rằng:
script-src https://host1.com https://host2.com
sẽ chỉ định chính xác cả hai nguồn gốc hợp lệ.
Tuy nhiên, vấn đề của bạn có thể là một trong hai:
CSP này disallows all subdomains, bao gồm www.foo.com
và www.example.com
. Bạn có thể thêm các tên máy chủ tên miền phụ đó một cách rõ ràng hoặc bạn có thể sử dụng https://*.foo.com
để cho phép tất cả các tên miền phụ.
Nếu bất kỳ yêu cầu tập lệnh nào của bạn chuyển hướng đến miền không được phép, yêu cầu sẽ không thành công. Ví dụ, nếu https://example.com/foo.js
trả lời bằng một 301
hoặc 302
chuyển hướng để https://notpermitted.com/foo.js
(không-được phép nguồn gốc) hoặc https://www.example.com/foo.js
(không được phép subdomain), yêu cầu sẽ thất bại according to the spec:
Bất cứ khi nào user agent lấy một URI (kể cả khi sau đổi hướng) ... nếu URI không phù hợp với các nguồn kịch bản cho phép, user agent phải hành động như thể họ đã nhận được một sản phẩm nào HTTP 400 phản ứng ...
EDIT:
Chỉ cần xác nhận, có, tiện ích mở rộng của Chrome có thể đưa vào danh sách cho phép nhiều nguồn gốc HTTPS. Bạn có thể xây dựng một phần mở rộng đơn giản để kiểm tra điều này:
manifest.json
{
"name":"CSP Test",
"version":"1.0",
"manifest_version":2,
"browser_action":{
"default_popup":"csp_test.html"
},
"content_security_policy": "script-src 'self' https://www.iana.org https://ajax.googleapis.com; object-src 'self'"
}
csp_test.html
<script src="https://www.iana.org/_js/2013.1/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="csp_test.js"></script>
csp_test.js
alert(jQuery)
alert(jQuery.ui)
Tiện ích này tải jQuery và jQuery UI từ các miền từ xa.Nếu bạn xóa nguồn gốc khỏi CSP, bạn sẽ thấy cảnh báo "undefined
" biểu thị rằng một trong các thư viện không tải được.
Các tập lệnh nội dung không bị ảnh hưởng bởi CSP của tiện ích mở rộng, nhưng theo trang của. –
Đã chỉnh sửa câu trả lời của tôi một cách rộng rãi; vui lòng xác minh rằng tiện ích mẫu của tôi hoạt động cho bạn và bạn không thực hiện bất kỳ lỗi nào mà tôi nêu chi tiết trong câu trả lời của mình. – apsillers
Bạn có thực sự cố gắng truy cập 'example.com' không? 'Https: // example.com' thực tế có hai vấn đề: đầu tiên, nó chuyển hướng đến' https: // example.iana.org/'và thứ hai, nó sử dụng chứng chỉ không thích hợp cho miền của nó, khiến Chrome chặn nó. (Bạn chắc chắn sẽ nhận được một màn hình cảnh báo khi bạn nhập vào URL. Tôi không chắc nó xử lý các yêu cầu tài nguyên tập lệnh như thế nào, nhưng tôi đoán nó sẽ chặn chúng.) – apsillers