Kiểm tra Security Headers website
Nhập tên miền để xem trang chủ đang thiếu header bảo mật nào trong năm header quan trọng: CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy và HSTS.
Muốn có cấu hình sẵn? Tạo cấu hình Security Headers miễn phí cho nginx, Apache, Cloudflare.
Security headers là gì?
Là các dòng máy chủ gửi kèm mỗi trang web để dặn trình duyệt bật thêm lớp bảo vệ. Chúng không thay thế việc vá lỗi, nhưng chặn được nhiều kiểu tấn công phổ biến với chi phí gần như bằng không: chỉ vài dòng cấu hình.
| Header | Tác dụng | Giá trị gợi ý |
|---|---|---|
| Content-Security-Policy | Giới hạn nguồn được tải script, ảnh, CSS; giảm tác hại khi bị chèn mã (XSS). | Bắt đầu với Report-Only |
| X-Frame-Options | Chặn trang bị nhúng vào iframe của trang lừa đảo (clickjacking). | SAMEORIGIN |
| X-Content-Type-Options | Không cho trình duyệt đoán kiểu file, tránh chạy nhầm file tải lên như script. | nosniff |
| Referrer-Policy | Không gửi đường dẫn đầy đủ (có thể chứa mã, token) sang trang khác khi khách bấm link ra ngoài. | strict-origin-when-cross-origin |
| Strict-Transport-Security | Bắt trình duyệt luôn dùng HTTPS cho tên miền. | max-age=31536000 |
Cấu hình mẫu
nginx:
# nginx: inside server { ... }, then nginx -t && systemctl reload nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; frame-ancestors 'self'" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;Apache:
# Apache: .htaccess or VirtualHost (needs: a2enmod headers) <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; frame-ancestors 'self'" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" </IfModule>
Cloudflare: Rules → Transform Rules → Modify Response Header → Create rule → All incoming requests → thêm từng header bằng “Set static” → Deploy.
CSP mẫu ở trên dùng chế độ Report-Only nên không chặn gì, chỉ báo lỗi trong Console. Theo dõi vài ngày, chỉnh danh sách nguồn cho đúng với site, rồi đổi tên header thành Content-Security-Policy.
Kiểm tra toàn bộ website, không chỉ một mục
Bản quét miễn phí kiểm tra cùng lúc SSL, email giả mạo, header bảo mật, file nhạy cảm bị lộ, CMS cũ và dấu hiệu bị hack, kèm hướng dẫn sửa bằng tiếng Việt.
Miễn phí sau khi xác minh tên miền: quét lại hằng tuần và gửi email khi có vấn đề mới. PRO (199.000đ/tháng): quét chuyên sâu với hơn 5.000 mẫu kiểm tra lỗ hổng đã biết, quét chuyên sâu lại tới 10 lần/ngày, giám sát website sập 5 phút/lần.
Câu hỏi thường gặp
Thêm Content-Security-Policy có làm vỡ website không?
Có thể, nếu chặn mất script hay font mà trang cần. Vì vậy hãy bắt đầu bằng Content-Security-Policy-Report-Only, xem lỗi trong Console của trình duyệt, chỉnh cho đủ rồi mới chuyển sang chế độ chặn thật.
Dùng hosting chia sẻ, không sửa được nginx thì thêm header ở đâu?
Hầu hết hosting chạy Apache cho phép thêm header trong file .htaccess ở thư mục gốc. Nếu tên miền đi qua Cloudflare, có thể thêm bằng Transform Rules mà không cần đụng vào hosting.
X-Frame-Options và frame-ancestors khác nhau thế nào?
Cả hai đều chặn trang bị nhúng vào iframe. frame-ancestors là chỉ thị mới trong CSP và linh hoạt hơn; X-Frame-Options vẫn nên giữ cho trình duyệt cũ. Đặt cả hai không gây xung đột.
Công cụ kiểm tra trang nào?
Trang chủ qua HTTPS. Nếu một số trang khác do ứng dụng riêng trả về, header có thể khác; nên cấu hình header ở tầng máy chủ hoặc Cloudflare để áp dụng cho toàn site.