NỘI DUNG
Security Headers là gì?
Security Headers là các HTTP response headers được sử dụng để định cấu hình các tính năng bảo mật cho trình duyệt web khi truy cập vào trang web. Chúng cung cấp một cách để tăng cường bảo mật cho trang web của bạn bằng cách ngăn chặn các cuộc tấn công phổ biến như XSS, Clickjacking và MIME-sniffing.
Dưới đây là một số Security Headers phổ biến:
- Content-Security-Policy (CSP): Giúp kiểm soát các tài nguyên mà trình duyệt có thể tải từ trang web của bạn.
- X-XSS-Protection: Giúp bảo vệ trang web khỏi các cuộc tấn công XSS.
- X-Frame-Options: Giúp bảo vệ trang web khỏi bị clickjacking.
- Strict-Transport-Security (HSTS): Yêu cầu trình duyệt chỉ truy cập trang web của bạn qua HTTPS.
- Permissions-Policy: Giúp kiểm soát các quyền mà trang web có thể truy cập trên thiết bị của người dùng.
Lợi ích của việc sử dụng Security Headers:
- Tăng cường bảo mật: Security Headers giúp bảo vệ trang web của bạn khỏi các cuộc tấn công phổ biến.
- Cải thiện niềm tin của người dùng: Niềm tin của người dùng sẽ tăng khi họ biết rằng trang web của bạn được bảo vệ tốt.
- Tăng thứ hạng SEO: Một số Security Headers có thể giúp cải thiện thứ hạng SEO của trang web bạn.
Cách sử dụng Security Headers:
Có hai cách chính để sử dụng Security Headers:
- Cấu hình trên web server: Hầu hết các web server đều cho phép bạn cấu hình Security Headers thông qua file cấu hình.
- Sử dụng .htaccess: Bạn có thể sử dụng file .htaccess để cấu hình Security Headers cho các thư mục cụ thể trên trang web của bạn.
Lưu ý:
- Cần cẩn thận khi cấu hình Security Headers vì sai sót có thể làm hỏng trang web của bạn.
- Nên kiểm tra trang web của bạn sau khi thay đổi Security Headers để đảm bảo rằng nó hoạt động bình thường.
Công cụ kiểm tra Security Headers: https://securityheaders.com/
Thiết lập bảo mật Security Headers trên .htaccess
1. Strict-Transport-Security
Strict-Transport-Security (HSTS) là một tiêu đề HTTP giúp bảo vệ website của bạn khỏi các cuộc tấn công “man-in-the-middle” (MITM) bằng cách buộc trình duyệt web chỉ kết nối với website của bạn qua HTTPS (giao thức truyền tải an toàn).
Cách thức hoạt động:
- Khi bạn kích hoạt HSTS, trình duyệt web sẽ lưu trữ một “cookie” đặc biệt ghi nhớ rằng website của bạn yêu cầu kết nối HTTPS.
- Trong một khoảng thời gian nhất định (thường là một năm), trình duyệt web sẽ tự động kết nối với website của bạn qua HTTPS, ngay cả khi người dùng nhập URL HTTP.
- Điều này giúp ngăn chặn các kẻ tấn công chuyển hướng người dùng đến phiên bản HTTP giả mạo của website của bạn, nơi họ có thể đánh cắp thông tin đăng nhập hoặc dữ liệu cá nhân.
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
2. Content-Security-Policy
Content-Security-Policy (CSP) là một tiêu đề HTTP giúp bảo vệ trang web của bạn khỏi các cuộc tấn công bằng cách giới hạn các nguồn tải nội dung. Nói cách khác, CSP cho phép bạn chỉ định các nguồn nào được phép tải script, hình ảnh, iframe, v.v. trên trang web của bạn.
Lợi ích của việc sử dụng CSP:
- Ngăn chặn các cuộc tấn công XSS: CSP có thể giúp ngăn chặn các cuộc tấn công XSS bằng cách chỉ cho phép tải script từ các nguồn được phép.
- Giảm thiểu nguy cơ tấn công CSRF: CSP có thể giúp giảm thiểu nguy cơ tấn công CSRF bằng cách chỉ cho phép tải iframe từ các nguồn được phép.
- Cải thiện hiệu suất trang web: CSP có thể giúp cải thiện hiệu suất trang web bằng cách chỉ tải nội dung từ các nguồn được phép.
Header always set Content-Security-Policy "upgrade-insecure-requests; block-all-mixed-content"
3. X-Frame-Options
X-Frame-Options là một tiêu đề HTTP giúp bảo vệ trang web của bạn khỏi các cuộc tấn công clickjacking. Clickjacking là một loại hình tấn công lừa người dùng nhấp vào một liên kết hoặc nút mà họ không mong muốn. Kẻ tấn công có thể nhúng trang web của bạn vào một iframe trên một trang web khác, khiến người dùng nhầm tưởng rằng nội dung trong iframe là một phần của trang web họ đang truy cập.
X-Frame-Options cho phép bạn chỉ định liệu trang web của bạn có thể được nhúng trong iframe hay không. Bạn có thể đặt ba giá trị cho X-Frame-Options:
- DENY: Trang web của bạn không thể được nhúng trong iframe.
- SAMEORIGIN: Trang web của bạn chỉ có thể được nhúng trong iframe trên cùng một tên miền.
- ALLOW-FROM: Trang web của bạn có thể được nhúng trong iframe trên các tên miền được chỉ định.
Lợi ích của việc sử dụng X-Frame-Options:
- Ngăn chặn các cuộc tấn công clickjacking: X-Frame-Options có thể giúp ngăn chặn các cuộc tấn công clickjacking bằng cách chỉ cho phép nhúng trang web của bạn trong các iframe được phép.
- Cải thiện bảo mật trang web: X-Frame-Options có thể giúp cải thiện bảo mật trang web của bạn bằng cách giảm thiểu nguy cơ bị tấn công clickjacking.
Header set X-Frame-Options "sameorigin"
4. X-Content-Type-Options
X-Content-Type-Options là một tiêu đề HTTP giúp bảo vệ trang web của bạn khỏi các cuộc tấn công dựa trên việc giả mạo loại nội dung (MIME type). Kẻ tấn công có thể khai thác lỗ hổng trong trình duyệt để giả mạo loại nội dung của một tệp, khiến trình duyệt tải và thực thi mã độc hại.
Lợi ích của việc sử dụng X-Content-Type-Options:
- Ngăn chặn các cuộc tấn công dựa trên giả mạo MIME type: X-Content-Type-Options giúp bảo vệ trang web của bạn khỏi các cuộc tấn công dựa trên việc giả mạo loại nội dung, như Drive-by download và Cross-site Scripting (XSS).
- Cải thiện bảo mật trang web: X-Content-Type-Options giúp tăng cường bảo mật trang web bằng cách giảm thiểu nguy cơ bị tấn công bởi các loại hình tấn công dựa trên giả mạo MIME type.
Header always set X-Content-Type-Options "nosniff"
5. Referrer-Policy
Referrer-Policy là một tiêu đề HTTP cho phép bạn kiểm soát thông tin referrer (nguồn gốc của yêu cầu) được gửi đi khi người dùng điều hướng từ trang web của bạn đến một trang web khác. Bằng cách này, bạn có thể giảm nguy cơ rò rỉ thông tin nhạy cảm.
Header always set Referrer-Policy "same-origin"
6. Permissions-Policy
Permissions-Policy là một tiêu đề HTTP mới cho phép bạn kiểm soát các quyền mà trang web của bạn có thể yêu cầu từ trình duyệt. Nó giúp bảo vệ người dùng khỏi các trang web độc hại và tăng cường quyền riêng tư của họ.
Header set Permissions-Policy "camera=self; microphone=self"
Tổng hợp lại sau khi thêm xong sẽ có các quy tắt sau. Bạn copy dán vào trên cùng file `.htaccess và lưu lại.
<IfModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests; block-all-mixed-content"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Frame-Options "sameorigin"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "same-origin"
Header set Permissions-Policy "camera=self; microphone=self"
</IfModule>
Thiết lập bảo mật Security Headers trên NGINX
Đối với máy chủ bạn sử dụng NGINX, bạn hãy copy các quy tắt sau và cấu hình bên trong block server. Sau đó kiểm tra cấu hình bằng lệnh nginx -t
xem có lỗi không. Nếu không lỗi bạn khởi động lại nginx.
server {
# Existing website configuration
location / {
# Existing website location configuration
# Security Header configuration
add_header Content-Security-Policy "upgrade-insecure-requests; block-all-mixed-content";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "same-origin";
add_header Permissions-Policy "camera=self; microphone=self";
}
}
Sau khi khởi động lại nginx bằng lênh systemctl reload nginx
thì bạn có thể quay lại securityheaders.com để kiểm tra nhé.
Thiết lập bảo mật Security Headers trên CloudFlare
Nếu bạn đang sử dụng CloudFlare thì sử dụng lợi thế của CloudFlare và cấu hình nhé.
Bạn truy cập vào CloudFlare chọn Rules => Transform Rules
Chọn tab Modify Response Header => Create rule
Tab Rule name (required) bạn đặt tên bất kỳ. Chọn vào All incoming requests và nhập và các quy tắt mà tôi để bên dưới. Thêm xong thì chọn Deploy.
content-security-policy | upgrade-insecure-requests; block-all-mixed-content |
permissions-policy | accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=() |
referrer-policy | no-referrer-when-downgrade |
strict-transport-security | max-age=31536000; includeSubDomains; preload |
x-content-type-options | nosniff |
x-frame-options | SAMEORIGIN |
x-xss-protection | 1; mode=block |
Sau khi Deploy thì bạn có thể quay lại securityheaders.com để kiểm tra nhé.
Kết luận
Security Headers là một công cụ quan trọng để bảo vệ trang web của bạn khỏi các cuộc tấn công. Sử dụng Security Headers một cách chính xác có thể giúp bạn tăng cường bảo mật, cải thiện niềm tin của người dùng và tăng thứ hạng SEO cho trang web của bạn.