HSTS (HTTP Strict Transport Security) là cơ chế cho phép website yêu cầu browser chỉ truy cập host bằng HTTPS trong một khoảng thời gian nhất định. Sau khi browser nhận header Strict-Transport-Security qua HTTPS, các lần truy cập sau bằng HTTP sẽ được nâng lên HTTPS trước khi request được gửi theo flow thông thường.
HSTS giúp giảm nguy cơ SSL stripping và ngăn người dùng click-through một số lỗi certificate trên host đã được ghi nhớ. Tuy nhiên đây là control có tính duy trì theo thời gian, nên bật sai có thể gây downtime kéo dài nếu certificate hoặc subdomain chưa sẵn sàng.
HSTS hoạt động như thế nào?
Header cơ bản:
Strict-Transport-Security: max-age=31536000
max-age cho biết số giây browser cần ghi nhớ rằng host chỉ được truy cập bằng HTTPS.
Có thể thêm:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Và trong một số trường hợp:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Nhưng càng mở rộng scope thì yêu cầu readiness càng cao.
HSTS giải quyết rủi ro nào?
Ngay cả khi site redirect HTTP sang HTTPS, request đầu tiên vẫn có thể đi qua HTTP trước khi browser nhận redirect. HSTS giúp browser ghi nhớ host phải dùng HTTPS, từ đó giảm cơ hội cho attacker ngăn upgrade ở những lần truy cập sau.
Nó cũng khiến browser không cho người dùng bỏ qua lỗi certificate trên HSTS host, giúp tránh việc người dùng tiếp tục qua một kết nối TLS có vấn đề.
HSTS không làm gì?
- Không vá lỗ hổng ứng dụng.
- Không thay CSP.
- Không chứng minh certificate renewal sẽ luôn hoạt động.
- Không bảo vệ subdomain nếu chưa dùng
includeSubDomains. - Không tự sửa mixed content hoặc HTTP resource trong trang.
- Không thay việc redirect HTTP sang HTTPS ở server.
HSTS là transport policy, không phải điểm bảo mật tổng thể.
Khi nào nên bật HSTS?
Chỉ nên bật khi:
- website đã phục vụ HTTPS ổn định;
- certificate chain hợp lệ và renewal process đáng tin cậy;
- HTTP redirect hoạt động đúng;
- không còn route business-critical bắt buộc HTTP;
- monitoring certificate expiry đã có owner;
- đã có rollback/change-control plan.
Trước khi tăng max-age dài, nên bắt đầu với giá trị ngắn hơn trong giai đoạn test.
includeSubDomains có rủi ro gì?
Khi bật includeSubDomains, policy áp dụng cho subdomain của host. Điều này chỉ an toàn nếu mọi subdomain cần truy cập đều hỗ trợ HTTPS đúng.
Ví dụ: nếu legacy.example.com vẫn chỉ chạy HTTP mà apex domain gửi HSTS với includeSubDomains, người dùng có thể không truy cập được legacy subdomain.
Vì vậy trước khi bật cần inventory DNS/subdomain:
- subdomain production;
- staging/dev public;
- mail/webmail;
- legacy service;
- third-party CNAME;
- service tạm thời.
HSTS preload là gì?
Preload là cơ chế đưa domain vào danh sách tích hợp sẵn trong browser để HTTPS được ưu tiên ngay từ lần kết nối đầu tiên, trước cả khi browser từng nhận HSTS header từ website.
Đây không phải bước nên bật mặc định. Preload làm rollback khó hơn vì thay đổi cần đi qua preload ecosystem và browser release cycle.
Trước khi preload, cần chắc chắn rằng HTTPS sẽ được duy trì lâu dài trên apex và toàn bộ subdomain theo yêu cầu preload hiện hành.
Rollout HSTS an toàn
- Đảm bảo HTTPS hoạt động đúng trên production.
- Kiểm certificate chain và renewal automation.
- Kiểm HTTP sang HTTPS redirect.
- Inventory subdomain.
- Bắt đầu với
max-agengắn. - Theo dõi error, certificate và compatibility.
- Tăng dần
max-age. - Chỉ thêm
includeSubDomainskhi inventory đã sạch. - Chỉ cân nhắc preload khi business chấp nhận commitment dài hạn.
Ví dụ rollout theo giai đoạn
Giai đoạn thử nghiệm:
Strict-Transport-Security: max-age=300
Sau khi ổn định:
Strict-Transport-Security: max-age=86400
Tiếp tục tăng khi đã đủ confidence. Không có một cadence bắt buộc; tốc độ tăng phụ thuộc architecture, change process và khả năng rollback.
HSTS và certificate lifecycle
HSTS làm lỗi certificate nghiêm trọng hơn về mặt availability vì browser không cho bypass. Do đó HSTS phải đi cùng certificate monitoring, renewal và deployment validation. Một failure mode điển hình là Website Downtime do TLS Certificate hết hạn.
Xem thêm TLS Certificate Expiry & Renewal Risk Audit và Certificate Lifecycle Management.
HSTS và CSP upgrade-insecure-requests
Hai cơ chế không tương đương. CSP upgrade-insecure-requests giúp nâng một số HTTP resource/navigation trong context trang; HSTS là browser policy ở cấp host cho future requests.
Vì vậy không nên dùng CSP directive để thay HSTS.
Checklist trước khi bật HSTS dài hạn
- HTTPS 100% trên route quan trọng.
- Certificate renewal đã test.
- Monitoring expiry đang hoạt động.
- Không còn subdomain HTTP quan trọng.
- HTTP redirect đúng.
- CDN/reverse proxy không strip header.
- Đã test ở browser thật.
- Đã có rollback owner.
- Chưa preload nếu chưa sẵn sàng commitment dài hạn.
Kết luận
HSTS là control rất mạnh nhưng chỉ an toàn khi HTTPS lifecycle đã ổn định. Bật HSTS quá sớm có thể biến một lỗi certificate hoặc subdomain legacy thành sự cố truy cập diện rộng.
Để hiểu HSTS trong bức tranh security headers rộng hơn, xem Security Headers cho website.
