Các giao thức văn bản thuần tuý, chẳng hạn như HTTP, có thể dễ bị tấn công nghe lén, trong đó kẻ tấn công có thể đọc nội dung được truyền. Bảo mật tầng truyền tải (TLS) có thể mã hoá lưu lượng truy cập và khiến kẻ tấn công khó sử dụng dữ liệu này hơn đáng kể nếu dữ liệu bị thu thập.
Tuy nhiên, kẻ tấn công có thể vượt qua TLS bằng cách buộc các kết nối được mã hoá sử dụng HTTP văn bản thô. Để giải quyết vấn đề này, bạn có thể sử dụng tiêu đề phản hồi Bảo mật truyền tải nghiêm ngặt HTTP (HSTS). HSTS buộc trình duyệt của người dùng truy cập vào một trang web bằng TLS và không cho phép trình duyệt quay lại HTTP văn bản thuần tuý trong một khoảng thời gian nhất định.
Cách bài kiểm tra Lighthouse không thành công
Quy trình kiểm tra sẽ gắn cờ các vấn đề sau đây với tiêu đề HSTS:
- Nếu không tìm thấy tiêu đề HSTS.
- Nếu thiếu một trong các chỉ thị được đề xuất (
max-age,includeSubDomains,preload) - Nếu thời lượng cho chỉ thị
max-agedưới một năm (31536000 giây). - Nếu có lỗi cú pháp khi phân tích cú pháp tiêu đề, chẳng hạn như một chỉ thị không xác định.
Định cấu hình chính sách HSTS mạnh
Cấu hình tiêu đề HSTS tối ưu có dạng như sau:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- Chỉ thị
max-agechỉ định khoảng thời gian mà trình duyệt của người dùng buộc phải truy cập vào một trang web chỉ bằng TLS (tính bằng giây). Sau khi hết thời gian này, người dùng có thể truy cập lại vào trang web bằng HTTP thuần tuý nếu trang web không cung cấp tiêu đề HSTS (hoặc lệnh chuyển hướng tạm thời từ HTTP sang HTTPS). - Việc đặt chỉ thị
includeSubDomainssẽ thực thi tiêu đề trên mọi miền con của URL trang gửi tiêu đề ban đầu. Ví dụ: việcgoogle.comgửi tiêu đề HSTS có chứa chỉ thịincludeSubDomainssẽ thực thi tiêu đề HSTS trênmail.google.com. - Việc đặt chỉ thị
preloadvà gửi miền đến dịch vụ tải trước HSTS sẽ biên dịch miền thành các tệp nhị phân của trình duyệt sử dụng danh sách HSTS được tải trước. Điều này đúng với cả Google Chrome.
Có một số rủi ro khi triển khai tiêu đề HSTS. Mọi tính năng yêu cầu kết nối HTTP không mã hoá sẽ bị hỏng trong thời gian được đặt trong chỉ thị max-age. Thậm chí có thể lâu hơn nếu bạn áp dụng chỉ thị preload.
Để giảm các rủi ro liên quan đến việc triển khai, bạn nên áp dụng phương pháp triển khai theo giai đoạn:
Bắt đầu với một
max-agenhỏ và chỉ thêmincludeSubDomains(không thêmpreload):max-age=3600; includeSubDomainsSau thời gian chờ (chẳng hạn như một tuần) mà không có vấn đề nào được báo cáo, hãy tăng
max-age. Ví dụ:max-age=604800; includeSubDomainsNếu giai đoạn ban đầu này diễn ra thành công trong một khoảng thời gian dài (chẳng hạn như 3 tháng), thì trang web và các miền phụ của trang web đó sẽ được thêm vào danh sách tải trước HSTS và chỉ thị
preloadsẽ được thêm vào.max-age=63072000; includeSubDomains; preload