2013-07-22 35 views
9

Tôi đang viết một tiện ích mở rộng chrome cần có hai miền trong danh sách trắng của mình cho chính sách bảo mật nội dung. Tôi đã xem xét các tài liệu chính thức, nhưng tôi vẫn không thể tìm ra cú pháp thích hợp.Làm trắng nhiều tên miền trong chính sách bảo mật nội dung

Sau đây dường như không làm việc:

"content_security_policy": "script-src 'self' https://foo.com https://example.com; object-src 'self'" 

EDIT:

Cả hai kịch bản nội dung của tôi và bật lên của tôi có thể tiếp cận foo.com, tuy nhiên, không thể đạt example.com .

Tiện ích của Chrome có khả năng có nhiều nguồn được đưa vào danh sách trắng trong CSP không?

+0

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

+0

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

+0

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

Trả lời

10

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:

  1. CSP này disallows all subdomains, bao gồm www.foo.comwww.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ụ.

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

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ. Tên miền mà tôi đang cố gắng liên hệ đã có một số quy tắc chuyển hướng lạ đang thực thi HTTP trong một số điều kiện nhất định. –

+0

câu trả lời rất sâu sắc! – fegemo

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