Công cụ tạo Content Security Policy (CSP)

Xây dựng Content-Security-Policy theo từng chỉ thị, xuất ra header, thẻ meta, cấu hình Nginx hoặc Apache, và nhận cảnh báo về các thiết lập không an toàn.

Header phản hồi HTTP
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
Đánh giá chính sách
Các kiểm tra tích hợp không phát hiện vấn đề nào.
Thẻ HTML <meta>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
frame-ancestors, report-uri, report-to và sandbox không có tác dụng trong thẻ <meta> nên đã được bỏ ra – hãy gửi header HTTP để dùng chúng.
Nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Apache (.htaccess)
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
Nhập chính sách có sẵn
Hãy bắt đầu ở chế độ chỉ báo cáo (Content-Security-Policy-Report-Only) và theo dõi console trình duyệt trước khi áp dụng chính sách mới. Các kiểm tra ở đây là tĩnh, dựa trên quy tắc phổ biến của các công cụ đánh giá CSP; chúng không thấy được script thực tế trên trang của bạn.

Tạo CSP là gì?

Công cụ tạo CSP này giúp bạn viết Content-Security-Policy giới hạn nơi script, style, ảnh, frame và các tài nguyên khác được phép tải về. Nó bắt đầu từ một chính sách nghiêm ngặt, cho phép bạn sửa từng chỉ thị và đánh giá kết quả theo thời gian thực, cảnh báo các điểm yếu như 'unsafe-inline', nguồn script dạng wildcard, thiếu object-src hoặc base-uri, và từ khóa không đặt trong dấu nháy. Bạn cũng có thể nhập một chính sách có sẵn.

Cách sử dụng Tạo CSP

  1. Bắt đầu từ Chính sách khởi đầu nghiêm ngặt hoặc Xóa tất cả.
  2. Sửa nguồn của từng chỉ thị, ví dụ 'self' https://cdn.example.com.
  3. Bật/tắt upgrade-insecure-requests và thêm report-uri nếu cần.
  4. Đọc phần đánh giá chính sách và khắc phục các phát hiện mức cao và trung bình.
  5. Sao chép chính sách dưới dạng header HTTP, thẻ meta, dòng cấu hình Nginx hoặc Apache; hoặc nhập một chính sách có sẵn để phân tích.

Ví dụ

Đầu vào
Strict starter policy
Đầu ra
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests

Khi nào nên dùng Tạo CSP

Dùng công cụ để soạn thảo hoặc rà soát CSP trước khi triển khai. Hãy triển khai chính sách mới bằng Content-Security-Policy-Report-Only trước và theo dõi vi phạm, vì một chính sách nghiêm ngặt sẽ làm hỏng script inline và widget bên thứ ba mà bạn quên cho phép. Các bước kiểm tra là tĩnh và không thấy được trang của bạn thực sự tải những script nào.

Tạo CSP hoạt động như thế nào

Các chỉ thị được tuần tự hóa theo thứ tự cố định dạng name source source; …, bỏ qua chỉ thị trống. Phần đánh giá áp dụng các quy tắc tĩnh tương tự CSP Evaluator của Google: từ khóa như self hoặc none phải đặt trong dấu nháy; script-src (hoặc default-src khi dự phòng) không có nonce/hash mà chứa 'unsafe-inline', 'unsafe-eval', *, http:, https: hoặc data: sẽ bị đánh dấu; object-src nên là 'none'; base-uri, frame-ancestors và form-action nên được đặt. Phiên bản thẻ meta bỏ frame-ancestors, report-uri, report-to và sandbox, vì trình duyệt bỏ qua chúng trong thẻ meta.

Các Trường Hợp Sử Dụng Phổ Biến

  • Tạo CSP nghiêm ngặt đầu tiên cho một website mới.
  • Rà soát chính sách sao chép từ production để tìm 'unsafe-inline' và wildcard.
  • Thêm đúng cách máy chủ analytics hoặc CDN vào script-src.
  • Lấy chính xác dòng add_header của Nginx cho một chính sách.

Câu Hỏi Thường Gặp

Vì sao 'unsafe-inline' là vấn đề?

Nó cho phép mọi script inline, kể cả script bị chèn qua lỗ hổng XSS, làm mất tác dụng chính của CSP. Hãy dùng nonce hoặc hash thay thế.

Nên dùng header hay thẻ meta?

Nên dùng header HTTP. Thẻ meta không dùng được frame-ancestors, report-uri hay sandbox, và chỉ áp dụng cho nội dung phía sau nó.

Làm sao thử nghiệm mà không làm hỏng website?

Gửi cùng chính sách dưới dạng Content-Security-Policy-Report-Only; trình duyệt báo vi phạm trong console mà không chặn gì cả.

Khám phá thêm danh mục