CertH certH
Trong trang này

HSTS giải thích: max-age, preload và những gì sẽ hỏng

Cập nhật 2026-11-03 · 6 phút đọc

HSTS là header bảo mật duy nhất có thể khiến một site không truy cập được — kể cả với chủ sở hữu. Nó cũng là yêu cầu cho A+. Khoảng cách giữa hai sự thật đó hoàn toàn nằm ở kỷ luật triển khai.

Header thực sự làm gì

Strict-Transport-Security báo cho trình duyệt rằng host này chỉ được liên hệ qua HTTPS trong N giây tới. Sau khi nhận, trình duyệt viết lại các liên kết http:// nội bộ, chặn nút bỏ qua lỗi chứng chỉ và từ chối hoàn toàn HTTP thuần — tất cả trước khi bất kỳ request nào rời khỏi máy.

Đó là lý do nó chống được tấn công hạ cấp mà chuyển hướng không chống được: chuyển hướng vẫn gửi request đầu tiên ở dạng rõ, và đó chính là request mà kẻ tấn công trên mạng muốn chặn.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

max-age là đồng hồ đếm ngược không thể hủy

max-age được lưu ở phía client. Nếu bạn phát một năm rồi gỡ header, mọi trình duyệt đã thấy nó vẫn buộc HTTPS tới một năm. Không có công tắc phía máy chủ để tắt.

CertH coi 180 ngày (15552000 giây) là ngưỡng cho A+. Một năm là giá trị thường dùng trong production. Dưới 180 ngày vẫn được tính là HSTS đã bật trong phần tóm tắt, nhưng không mở khóa A+.

includeSubDomains và preload là hai quyết định riêng

includeSubDomains mở rộng quy tắc cho mọi subdomain. Nếu có subdomain chỉ nói HTTP — một công cụ nội bộ, bảng quản trị cũ, host staging — nó sẽ không truy cập được với bất kỳ ai đã ghé tên miền cha. Hãy rà DNS trước.

Preload đi xa hơn: tên miền được nhúng vào danh sách phát hành kèm trình duyệt, nên quy tắc áp dụng ngay từ lần truy cập đầu, trước khi thấy bất kỳ header nào. Gỡ bỏ mất hàng tháng và cần gửi yêu cầu vào danh sách gỡ. Đừng thêm preload trước khi header đã ổn định vài tháng.

  • •Phát header trên mọi phản hồi HTTPS, kể cả trang lỗi — một 404 không có nó không dạy trình duyệt điều gì.
  • •Không bao giờ gửi HSTS qua HTTP thuần; theo đặc tả trình duyệt sẽ bỏ qua, nên vòng lặp chuyển hướng cấu hình sai không sửa được bằng cách này.
  • •Kiểm tra subdomain có dịch vụ chỉ HTTP trước khi thêm includeSubDomains.
  • •Thêm preload sau cùng, và chỉ sau khi max-age đã ở mức một năm một thời gian.

Triển khai không làm hỏng gì

Bắt đầu với max-age ngắn để sai sót hết hạn nhanh: max-age=300. Giữ một tuần và theo dõi subdomain hỏng cùng báo cáo nội dung hỗn hợp. Rồi chuyển sang một ngày, một tháng, rồi một năm. Mỗi bước đều đảo ngược được trong cửa sổ trước — đó chính là ý nghĩa của việc bắt đầu ngắn.

Nếu có gì đó hỏng, cách sửa là phục vụ HTTPS đúng trên host bị ảnh hưởng — không phải gỡ header, vì gỡ cũng không giúp được ai đã nhận nó.

FAQ

Thiếu HSTS có làm giảm điểm không?

Nó không trừ điểm cơ bản, nhưng chặn A+: điểm cao nhất yêu cầu HSTS với max-age tối thiểu 180 ngày hoặc preload. Một site có thể đạt 100 và vẫn là A nếu thiếu nó.

Có thể dùng HSTS mà không sở hữu mọi subdomain?

Có, miễn bạn bỏ includeSubDomains. Khi đó header chỉ áp dụng cho đúng host đã phát nó.

Đọc tiếp