// //]]>

Hướng dẫn tạo CSP nhúng vào website để ngăn chặn các cuộc tấn công XSS

Ở bài trước chúng ta đã tìm hiểu CSP là gì, phần tiếp theo này mình sẽ hướng dẫn tạo CSP, cách áp dụng CSP vào việc bảo mật website và chống mã độc ( Malware ).

Mặc dù CSP rất tuyệt vời và hiệu quả trong việc bảo mật, nhưng nó cũng có thể gây lỗi cho website nếu bạn không thiết lập chính xác. Javascript là một thành phần không thể thiếu của website, sẽ như thế nào nếu bạn block một file Javascript của Facebook, mà tác dụng của nó là để khách truy cập “Like” web của bạn ? Hoặc block một file Javascript có tác dụng tạo mã bảo mật chống spam ?

Muốn ứng dụng tốt CSP vào việc bảo mật website, bạn phải nắm rõ các chức năng của trang web cũng như những dịch vụ bên thứ 3 bạn đang sử dụng, như Google, Facebook, Twitter …

Tạo Content Security Policy – CSP
Để tránh làm ảnh hưởng đến hoạt động của website trong quá trình tạo, CSP có một công cụ rất hay đó là “Report Only”. Chúng ta sẽ sử dụng Report Only để test lỗi trước khi chính thức đưa CSP vào sử dụng.

Trình duyệt sẽ load đầy đủ các thành phần của trang web và báo lỗi cho chúng ta biết nếu thiết lập CSP không chính xác. Sai đến đâu sửa đến đấy.

Kiểm tra lỗi CSP bằng trình duyệt :
  • Trong Chrome bạn chọn Ctrl + Shift + i để bật chế độ Developer Tools và chuyển đến mục Console
  • Trong Firefox bạn nhấn Ctrl + Shift + K để bật chế độ Web Console
  • Thêm CSP vào Nginx và Apche
Trong Nginx, mở file /etc/nginx/nginx.conf và thêm vào như sau :

add_header Content-Security-Policy-Report-Only "default-src 'none'";

Lưu ý : sau mỗi lần thay đổi bạn nhớ phải reload lại nginx. 

sudo service nginx reload

Trong Apache thêm vào file httpd.conf trong VirtualHost hoặc thêm vào file .htaccess nếu bạn sử dụng Shared Hosting.

Header set Content-Security-Policy-Report-Only "default-src 'none';"

Ok, bây giờ chúng ta sẽ làm một bài test đơn giản với CSP. Trên website, mình sử dụng Google Font và Google Analytics, vậy là cần phải tải font từ Google và tải một file Javascript từ https://www.google-analytics.com/analytics.js.

Nếu chúng ta không thiết lập cho CSP để trình duyệt tải và thực thi hai nguồn tài nguyên này, vậy trình duyệt sẽ báo lỗi và từ chối tải tài nguyên vì chúng ta chưa thiết lập những nguồn nội dung này trong CSP. 

https://fonts.googleapis.com 
https://fonts.gstatic.com https://www.google-analytics.com

Thiết lập chính xác cho CSP trong trường hợp này là :

Content-Security-Policy-Report-Only "default-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://fonts.gstatic.com data:; img-src 'self' https://www.google-analytics.com data:; script-src 'self' https://www.google-analytics.com;";

Ok, đọc đến đây chắc bạn đã hiểu hơn cách làm việc và cách tạo CSP rồi đúng không. Một nguồn nội dung ( CSS hoặc Javascript ) không được thiết lập trong CSP, trình duyệt sẽ từ chối tải và thực thi. Đó cũng là cách CSP bảo vệ chúng ta khỏi các mã độc Hacker chèn vào mã nguồn.

Giờ chúng ta sẽ chính thức áp dụng CSP vào website. Dưới đây là các dịch vụ/chức năng các bạn có thể tham khảo và sửa lại cho phù hợp với website của mình.
  • Google Analytics
  • Google Fonts
  • Facebook ( share bài viết )
  • Pinterest ( share bài viết )
  • Google Plus ( share bài viết )
  • AMP Project ( trang tăng tốc AMP )
  • Inline CSS & JS ( các đoạn mã nhỏ nhúng thẳng vào mã nguồn )
  • Gravatar
  • Jquery
Để CSP chính thức có hiệu lực, hãy nhớ xóa chữ Report-Only đi nhé.

add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://fonts.gstatic.com https://ajax.googleapis.com https://*.pinterest.com data:; img-src 'self' https://secure.gravatar.com https://www.facebook.com https://www.google-analytics.com data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.pinterest.com https://cdn.jsdelivr.net https://code.jquery.com https://cdn.ampproject.org https://www.google-analytics.com https://google.com https://facebook.com https://*.gravatar.com;";
Bonus – Chống mã độc với CSP
Trong trường hợp bạn phát hiện hoặc nghi ngờ website đã bị chèn mã độc, hãy sửa lại CSP như sau để ngăn chặn toàn bộ việc thực thi các file Javascript có trên host, những file từ nguồn bên ngoài và cả những đoạn mã “inline” được nhúng vào mã nguồn.

Content-Security-Policy "default-src 'none'; script-src 'none'; object-src 'none'; style-src 'none'; frame-src 'none';";

Sau đó hãy dùng plugin bảo mật WordPress iThemes Security để quét toàn bộ mã nguồn và loại bỏ mã độc.
DMCA.com Protection Status

Đánh giá bài viết:

logo mystown

Thông báo: Sửa lỗi xem ảnh trên MysTown

| Tường lửa : Bật

Đang trực tuyến:

Mystown author image
| | | | | | | | |

NHÓM TÁC GIẢ MYSTOWN

"Bí mật là những gì chúng ta trao cho người khác nhờ giữ hộ"

Mọi thứ đều chứa đựng điều bí ẩn, thậm chí cả bóng tối và sự câm lặng, tôi học được rằng cho dù tôi ở trạng thái nào, tôi cũng có thể yên bình.

- Chúng tôi không đi ngược lại quy luật của tự nhiên
- Chúng tôi không làm trái lẽ sống của xã hội
- Chúng tôi không tiếp tay cho cái sai
- Chúng tôi cung cấp những SỰ THẬT bị che giấu

Bài đăng cùng chuyên mục

Bình luận

Giới thiệu website review sách mới thuộc hệ thống website được sở hữu bởi MysGroup | Kệ Sách Online