Tìm hiểu về CSP (Content Security Policy)

Related Articles

Chắc hẳn mọi người trong giới bảo mật thông tin cũng đã nghe đâu đó về CSP rồi nhỉ ? CSP ( hay Content-Security-Policy ) thực ra là một header nằm trên request khi được gửi đến một server nào đó. Và chỉ có rất ít tổ chức triển khai triển khi công dụng này trên website của mình. Nó là gì thì tất cả chúng ta cùng khám phá nhé !

CSP là gì ?

CSP là một lớp bảo mật thông tin được thêm vào mục tiêu để phát hiện và ngăn ngừa 1 số ít loại tiến công thường gặp, gồm có cả cuộc tiến công XSS ( Cross Site Scripting ) và tiến công data injection .

Các trình duyệt không hỗ trợ CSP vẫn hoạt động bình thường với các máy chủ triển khai nó và ngược lại. Những trình duyệt không hỗ trợ CSP thì CSP sẽ được bỏ qua và thực hiện các chính sách mặc định của trang web.

Cách sử dụng

Để enable CSP, chúng ta chỉ cần cấu hình cho server của chúng ta trả về Content-Security-Policy HTTP headers.

Một cách khác chúng ta có thể sử dụng thông qua thẻ . Ví dụ: https://*

; child-src ‘none’;”>

Mục đích

Trước khi đi sâu vào mục tiêu, mình xin nói một chút ít về một lỗ hổng thần thánh có tên là XSS .

XSS là một kỹ thuật tấn công mục đích nằm thực thi đoạn malicious code bằng javascript nằm trên trình duyệt người dùng để thực hiện một số hành vi trái phép nào đó. Nhưng liệu có đơn giản là alert ra một popup là hacked ???? 🙂

  • Attacker có thể truy cập vào một trang web khác dưới danh nghĩa là bạn
  • Chiếm cookie rồi đăng nhập dưới tên bạn
  • Chèn một form đăng ký để lừa bạn nhập dữ liệu vào trong đó
  • Thực hiện load một file javascript từ nơi khác
  • Và còn nhiều chiêu trò hơn nữa …

Vì thế CSP sinh ra để hạn chế những vấn đề đó bằng cách:

  • Kiểm soát nơi request được tạo
  • Quy định các domain được phép truy cập trong một scope nhất định
  • Quy định nơi tài nguyên được load

Mặc dù vậy, CSP vẫn không hề ngăn ngừa hàng loạt những cuộc XSS mà nó chỉ hoàn toàn có thể giảm thiểu và hạn chế tối đa mức độ tác động ảnh hưởng do XSS gây ra .

Use case

Tên directive :

  • script-src: chỉ định nguồn (nơi) load các tài nguyên javascript
  • style-src: chỉ định nguồn (nơi) load các tài nguyên css
  • image-src: chỉ định nguồn (nơi) load các tài nguyên image
  • font-src: chỉ định nguồn (nơi) load các tài nguyên font
  • frame-src: chỉ định nguồn (nơi) load các tài nguyên frame

Các giá trị của CSP directive :

  • * : Là wildcard, hay còn có nghĩa là all
  • self: chỉ định domain đang truy cập
  • none: không cho phép bất kỳ nguồn nào
  • http://www.domain.com: cho phép tải resource từ domain được chỉ định, cái này khác hoàn toàn với domain.com
  • domain.com: cho phép tải resource từ domain chỉ định, không cho phép từ http://www.domain.com, subdomain.domain.com, cdn.domain.com, …
  • *.domain.com: cho phép load resource từ subdomain của domain domain.com
  • https: cho phép load từ những trang https

Một số ví dụ

  • EX1:

Content-Security-Policy: default-src 'self'

Chỉ cho phép tải resource từ domain hiện tại hoặc domain đang truy cập

  • EX2:

Content-Security-Policy: default-src 'self' *.trusted.com

Cho phép tải resource từ domain hiện tại và từ các subdomain khác của domain trusted.com

  • EX3:

Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

  • default-src ‘self’: Cho phép load resource từ domain hiện tại
  • img-src *: có thể lấy image từ bất kỳ nguồn nào
  • media-src media1.com media2.com: chỉ cho phép load media từ media1.com và media2.com
  • script-src userscripts.example.com: chỉ cho phép load script từ userscripts.example.com

Reference

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories