Content-Security-Policy là gì?
Content-Security-Policy (CSP) là một HTTP response header giúp ngăn chặn cross-site scripting (XSS), clickjacking và các cuộc tấn công tiêm mã khác. Nó hoạt động bằng cách chỉ định những nguồn nội dung nào được phép tải trên trang web của bạn.
Trạng Thái Dễ Bị Tấn Công
- Trình duyệt tải tài nguyên từ bất kỳ nguồn gốc nào
- Trang web bị lộ trước việc tiêm script độc hại
- Không kiểm soát được các nguồn nội dung
- Rủi ro tấn công XSS cao hơn
Trạng Thái Được Bảo Vệ
- Kiểm soát nghiêm ngặt các miền được phép
- Tự động chặn các script không được phép
- Quyền tài nguyên chi tiết
- Lớp bảo mật phòng thủ sâu
Tại Sao Sử Dụng CSP Header?
Bảo Vệ XSS
Chặn các script không được phép thực thi trên các trang của bạn, ngăn chặn kẻ tấn công tiêm mã độc hại thông qua các lỗ hổng.
Ngăn Chặn Trộm Dữ Liệu
Kiểm soát nơi trang của bạn có thể gửi dữ liệu thông qua kết nối fetch, XHR hoặc WebSocket, ngăn chặn việc rò rỉ dữ liệu.
Phòng Chống Clickjacking
Sử dụng chỉ thị frame-ancestors để ngăn chặn trang web của bạn bị nhúng trong các iframe độc hại cho các cuộc tấn công clickjacking.
Ngăn Chặn Nội Dung Hỗn Hợp
Bắt buộc HTTPS cho tất cả tài nguyên với upgrade-insecure-requests, loại bỏ các lỗ hổng nội dung hỗn hợp.
Công Cụ Này Giúp Như Thế Nào
Viết CSP headers theo cách thủ công dễ xảy ra lỗi và yêu cầu ghi nhớ tên chỉ thị và cú pháp nguồn. Trình tạo trực quan này cho phép bạn bật/tắt chỉ thị, nhấp vào các giá trị nguồn và ngay lập tức xem header được tạo ở định dạng bạn cần — cho dù đó là HTTP thô, Apache, Nginx hay PHP.
- 1. Content-Security-Policy là gì?
- 2. Cách Sử Dụng Trình Tạo CSP Header
- 3. Tính Năng
- 4. Các Câu Hỏi Thường Gặp
- 4.1. Sự khác biệt giữa Content-Security-Policy và Content-Security-Policy-Report-Only là gì?
- 4.2. Tại sao tôi nên luôn bao gồm object-src 'none'?
- 4.3. 'unsafe-inline' thực sự nguy hiểm như vậy sao?
- 4.4. default-src làm gì?
- 4.5. Tôi có thể sử dụng định dạng meta tag cho tất cả các tính năng CSP không?
- 4.6. 'strict-dynamic' là gì và khi nào tôi nên sử dụng nó?
Cách Sử Dụng Trình Tạo CSP Header
Chọn Điểm Bắt Đầu
Chọn một mẫu cài sẵn để bắt đầu với cấu hình phổ biến hoặc bắt đầu với Trống để xây dựng từ đầu. Các mẫu cài sẵn có sẵn bao gồm Nghiêm ngặt, Trang Web Cơ bản, SPA + API, WordPress, Thương mại điện tử và các cấu hình nặng CDN.
Cấu Hình Chỉ Thị
Bật hoặc tắt chỉ thị bằng cách nhấp vào hộp kiểm hoặc hàng tiêu đề của nó. Khi một chỉ thị được bật, bạn có thể:
- Nhấp vào nút nguồn nhanh ('self', 'none', 'unsafe-inline', v.v.) để thêm các giá trị phổ biến
- Nhập một miền tùy chỉnh (ví dụ: cdn.example.com, *.googleapis.com) và nhấp Thêm
- Nhấp vào nút nguồn một lần nữa để xóa nó
- Nhấp vào nút × trên các thẻ miền tùy chỉnh để xóa chúng
Xem Xét Cảnh Báo
Công cụ tự động phân tích chính sách của bạn và hiển thị các cảnh báo bảo mật. Cảnh báo đỏ chỉ ra các rủi ro bảo mật đáng kể, cảnh báo vàng gợi ý cải tiến và thông báo xanh cung cấp thông tin hữu ích.
Chọn Định Dạng Đầu Ra
Chọn định dạng đầu ra phù hợp với máy chủ web của bạn:
- Raw - Giá trị HTTP header thô
- Apache - Cho các tệp .htaccess hoặc tệp cấu hình Apache
- Nginx - Cho các khối máy chủ nginx.conf
- Meta Tag - Cho các thẻ HTML <meta> (lưu ý: Report-Only không được hỗ trợ)
- PHP - Cho các lệnh gọi hàm PHP header()
Sao Chép và Triển Khai
Nhấp vào nút Sao Chép để sao chép header được tạo vào clipboard của bạn. Hãy cân nhắc bật chế độ Report-Only trước tiên để kiểm tra chính sách của bạn mà không chặn bất kỳ tài nguyên nào.
Tính Năng
Trình Tạo Chỉ Thị Trực Quan
Mỗi chỉ thị CSP được hiển thị dưới dạng một hàng tương tác với công tắc bật/tắt. Bật một chỉ thị để tiết lộ bảng điều khiển cấu hình nguồn của nó với các nút thêm nhanh và nhập miền tùy chỉnh. Các chỉ thị được tổ chức thành bốn danh mục: Fetch, Document, Navigation và Other.
16 Chỉ Thị Được Hỗ Trợ
Chỉ Thị Fetch
Kiểm soát nơi các loại tài nguyên khác nhau có thể được tải từ:
default-src- Fallback cho tất cả các chỉ thị fetchscript-src- Nguồn JavaScriptstyle-src- Bảng tính CSSimg-src- Hình ảnh và faviconconnect-src- Kết nối Fetch, XHR, WebSocketfont-src- Web fontsobject-src- Plugin (Flash, Java applets)media-src- Audio và videoframe-src- Bối cảnh duyệt lồng nhau (iframe)worker-src- Web Workers và Service Workersmanifest-src- Web app manifests
Chỉ Thị Document & Navigation
Kiểm soát hành vi tài liệu và điều hướng:
base-uri- Hạn chế các URL có thể xuất hiện trong phần tử <base>form-action- Các điểm cuối hợp lệ cho việc gửi biểu mẫuframe-ancestors- Các cha hợp lệ có thể nhúng trang này (bảo vệ clickjacking)
frame-ancestors không thể được đặt thông qua meta tag — nó yêu cầu một HTTP header.Chỉ Thị Khác
Các cải tiến bảo mật bổ sung:
upgrade-insecure-requests- Tự động nâng cấp HTTP lên HTTPSblock-all-mixed-content- Chặn tất cả nội dung hỗn hợp (không dùng nữa, sử dụng upgrade-insecure-requests)report-uri- Điểm cuối để gửi báo cáo vi phạm (không dùng nữa, sử dụng report-to)
Mẫu Cài Sẵn
Nghiêm Ngặt
Trang Web Cơ Bản
SPA + API
WordPress
Thương Mại Điện Tử
CDN Nặng
Quản Lý Nguồn Thông Minh
Công cụ xử lý logic giá trị nguồn tự động để ngăn chặn lỗi cấu hình:
Loại Trừ Lẫn Nhau
Chọn 'none' tự động xóa tất cả các nguồn khác vì chúng loại trừ lẫn nhau.
Thay Thế Tự Động
Thêm bất kỳ nguồn nào khi 'none' hoạt động tự động xóa 'none' trước tiên.
Ngăn Chặn Trùng Lặp
Các nguồn trùng lặp được tự động phát hiện và ngăn chặn không được thêm.
Phân Tích Bảo Mật
Cảnh báo theo thời gian thực cảnh báo bạn về các vấn đề bảo mật tiềm ẩn trong cấu hình CSP của bạn:
Nhiều Định Dạng Đầu Ra
| Định Dạng | Trường Hợp Sử Dụng | Hỗ Trợ Report-Only |
|---|---|---|
| Raw HTTP | Giá trị header thô cho bất kỳ máy chủ nào | Có |
| Apache | Tệp .htaccess hoặc httpd.conf | Có |
| Nginx | Khối máy chủ nginx.conf | Có |
| Meta Tag | Phần tử HTML <meta> | Không |
| PHP | Hàm PHP header() | Có |
Dữ Liệu Của Bạn Vẫn Riêng Tư
Tất cả xử lý diễn ra trong trình duyệt của bạn mà không có giao tiếp máy chủ:
Không Có Yêu Cầu Máy Chủ
Không Theo Dõi
Các Câu Hỏi Thường Gặp
Sự khác biệt giữa Content-Security-Policy và Content-Security-Policy-Report-Only là gì?
Content-Security-Policy thực thi chính sách và chặn các tài nguyên vi phạm nó. Content-Security-Policy-Report-Only chỉ báo cáo các vi phạm mà không chặn bất cứ điều gì.
Cách tiếp cận hai giai đoạn này ngăn chặn việc vô tình phá vỡ chức năng trong khi cho phép bạn giám sát báo cáo vi phạm và tinh chỉnh chính sách của bạn một cách an toàn.
Tại sao tôi nên luôn bao gồm object-src 'none'?
Chỉ thị object-src kiểm soát các plugin như Flash và Java applets. Các plugin này có thể thực thi mã tùy ý và bỏ qua các bảo vệ CSP khác.
Đặt object-src thành 'none' chặn tất cả nội dung plugin, được khuyến nghị vì:
- Các trang web hiện đại hiếm khi cần plugin
- Flash và Java applets không dùng nữa và không an toàn
- Plugin có thể vượt qua các hạn chế script-src của CSP
- Hầu hết các trình duyệt đang loại bỏ hỗ trợ plugin
'unsafe-inline' thực sự nguy hiểm như vậy sao?
Có. Khi bạn cho phép 'unsafe-inline' trong script-src, bất kỳ script nội tuyến nào trên trang của bạn đều có thể thực thi — bao gồm các script được tiêm bởi kẻ tấn công thông qua các lỗ hổng XSS. Điều này làm suy yếu đáng kể bảo vệ CSP.
Dễ Bị Tấn Công
- Tất cả các script nội tuyến thực thi
- Các script được tiêm chạy tự do
- Bảo vệ XSS bị suy yếu
Được Bảo Vệ
- Chỉ các script được phép danh sách trắng chạy
- Các script được tiêm bị chặn
- Bảo vệ XSS mạnh mẽ
Các giải pháp tốt hơn: Sử dụng nonces hoặc hashes thay thế, cho phép các script nội tuyến cụ thể trong khi chặn các script được tiêm.
default-src làm gì?
default-src hoạt động như một fallback cho tất cả các chỉ thị fetch không được đặt rõ ràng. Ví dụ, nếu bạn đặt default-src 'self' nhưng không đặt img-src, hình ảnh sẽ chỉ tải từ miền của bạn.
Ví dụ:
Content-Security-Policy:
default-src 'self';
script-src 'self' cdn.example.com;
img-src *;
/* Result:
* - Scripts: 'self' + cdn.example.com (explicit)
* - Images: * (explicit)
* - Styles: 'self' (falls back to default-src)
* - Fonts: 'self' (falls back to default-src)
*/
Tôi có thể sử dụng định dạng meta tag cho tất cả các tính năng CSP không?
Không. Cách tiếp cận meta tag HTML có những hạn chế đáng kể:
- Không thể sử dụng chế độ Report-Only
- Không thể đặt chỉ thị frame-ancestors
- Không thể sử dụng report-uri hoặc report-to
- Không thể sử dụng chỉ thị sandbox
Meta tags hữu ích cho việc kiểm tra nhanh hoặc khi bạn không có quyền truy cập cấu hình máy chủ, nhưng HTTP headers cung cấp các khả năng CSP hoàn chỉnh.
'strict-dynamic' là gì và khi nào tôi nên sử dụng nó?
'strict-dynamic' cho trình duyệt biết rằng nó nên tin tưởng các script được tải bởi các script đã được tin tưởng. Điều này hữu ích cho các ứng dụng hiện đại tải động các mô-đun JavaScript.
Lợi Ích
Đơn giản hóa CSP cho các ứng dụng động
- Hoạt động với các module bundlers
- Hỗ trợ dynamic imports
- Giảm độ phức tạp chính sách
Cách Hoạt Động
Mô hình lan truyền tin tưởng
- Danh sách cho phép dựa trên host bị bỏ qua
- Hoạt động với các chính sách dựa trên nonce
- Các script tải các script đáng tin cậy khác
Tốt nhất cho: Single Page Applications (SPAs), các ứng dụng React/Vue/Angular và các trang web sử dụng Webpack hoặc các bundler tương tự.
Chưa có bình luận nào. Hãy là người đầu tiên!