CSP là gì?

Tháng 2 10, 2025

CSP, viết tắt của Content Security Policy (Chính sách bảo mật nội dung), là một lớp bảo mật bổ sung cho website, được thiết kế để phát hiện và ngăn chặn các loại tấn công phổ biến như tấn công XSS (Cross-Site Scripting) và tấn công injection (tiêm nhiễm dữ liệu). Về cơ bản, CSP hoạt động như một danh sách trắng (whitelist), quy định nguồn gốc của các script, style, image, frame được phép tải trên website. Điều này đảm bảo chỉ những tài nguyên được chỉ định rõ ràng mới có thể được tải, mọi yêu cầu không nằm trong whitelist sẽ bị chặn ngay lập tức. Các trình duyệt không hỗ trợ CSP vẫn hoạt động bình thường với máy chủ triển khai CSP và ngược lại. Trong trường hợp trình duyệt không hỗ trợ, CSP sẽ được bỏ qua và website sẽ áp dụng chính sách mặc định.

CSP hoạt động bằng cách thêm HTTP header Content-Security-Policy vào response từ server. Header này chứa một tập hợp các chỉ thị (directive) xác định loại nội dung nào được phép tải và từ nguồn nào. Ví dụ, chỉ thị script-src quy định nguồn gốc của các file JavaScript được phép tải.

Có nhiều chỉ thị khác nhau trong CSP, mỗi chỉ thị kiểm soát một loại tài nguyên cụ thể. Một số chỉ thị phổ biến bao gồm:

  • default-src: Áp dụng cho tất cả các loại tài nguyên nếu không có chỉ thị cụ thể nào được định nghĩa.
  • script-src: Kiểm soát việc tải các file JavaScript.
  • style-src: Kiểm soát việc tải các file CSS.
  • img-src: Kiểm soát việc tải hình ảnh.
  • font-src: Kiểm soát việc tải font chữ.
  • frame-src: Kiểm soát việc tải iframe.
  • object-src: Kiểm soát việc tải các đối tượng nhúng như Flash.
  • media-src: Kiểm soát việc tải các file media như audio và video.

Mỗi chỉ thị có thể nhận một hoặc nhiều giá trị, bao gồm:

  • 'self': Cho phép tải tài nguyên từ cùng nguồn gốc với website.
  • 'none': Không cho phép tải bất kỳ tài nguyên nào.
  • 'unsafe-inline': Cho phép sử dụng mã inline như <script> hoặc style inline. Tuy nhiên, không nên sử dụng giá trị này vì nó làm giảm hiệu quả bảo mật của CSP.
  • Một URL cụ thể: Cho phép tải tài nguyên từ URL được chỉ định.
  • Một tên miền: Cho phép tải tài nguyên từ tất cả các subdomain của tên miền được chỉ định. Ví dụ: example.com cho phép tải tài nguyên từ www.example.com, sub.example.com, v.v.
  • *: Wildcard, cho phép tải tài nguyên từ bất kỳ nguồn nào. Không nên sử dụng giá trị này vì nó vô hiệu hóa hầu hết các tính năng bảo mật của CSP.
  • data:: Cho phép tải tài nguyên từ data URI.
  • https:: Cho phép tải tài nguyên từ bất kỳ nguồn nào sử dụng HTTPS.

Ví dụ về một CSP đơn giản:

Content-Security-Policy: default-src 'self'; img-src 'self' data:; script-src 'self' https://example.com;

CSP này cho phép:

  • Tải tất cả các loại tài nguyên (ngoại trừ hình ảnh và script) từ cùng nguồn gốc với website.
  • Tải hình ảnh từ cùng nguồn gốc hoặc từ data URI.
  • Tải script từ cùng nguồn gốc hoặc từ https://example.com.

Để theo dõi các vi phạm CSP, bạn có thể sử dụng chỉ thị report-uri hoặc report-to. Chỉ thị này cho phép trình duyệt gửi báo cáo về các vi phạm CSP đến một URL được chỉ định. Dịch vụ như report-uri.com cung cấp giao diện để thu thập và phân tích các báo cáo này, giúp bạn hiểu rõ hơn về các lỗ hổng bảo mật trên website của mình.

Việc triển khai CSP đúng cách có thể giúp giảm thiểu đáng kể rủi ro từ các cuộc tấn công XSS và injection, bảo vệ website và người dùng khỏi các mối đe dọa an ninh mạng.

Leave A Comment

Create your account