Sử dụng chính sách HSTS mạnh

Các giao thức văn bản thuần tuý như HTTP có thể dễ bị tấn công nghe trộm, trong đó kẻ tấn công có thể đọc nội dung được truyền. May mắn thay, giao thức 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 bị thu thập.

Tuy nhiên, kẻ tấn công có thể lách 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, chúng tôi đã ra mắt tiêu đề phản hồi Bảo mật truyền tải nghiêm ngặt HTTP (HSTS). Tiêu đề này buộc trình duyệt của người dùng chỉ truy cập vào một trang web bằng TLS và không quay lại sử dụng văn bản thô HTTP (trong một khoảng thời gian nhất định).

Nguyên nhân khiến quy trình kiểm tra Lighthouse không thành công

Cảnh báo kiểm tra của Lighthouse cho biết không tìm thấy tiêu đề phản hồi HSTS.
Báo cáo Lighthouse cảnh báo rằng không tìm thấy tiêu đề phản hồi HSTS.

Quy trình kiểm tra sẽ gắn cờ các vấn đề sau đây liên quan đến tiêu đề HSTS:

  • Nếu không tìm thấy tiêu đề HSTS nào.
  • Nếu thiếu một trong các lệnh được đề xuất (max-age, includedSubDomains, preload)
  • Nếu thời lượng của lệnh max-age dướ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 lệnh 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-age chỉ định khoảng thời gian trình duyệt của người dùng bị buộc chỉ truy cập vào một trang web bằng TLS (tính bằng giây). Sau thời gian đó, bạn có thể truy cập lại trang web bằng HTTP thuần tuý nếu trang web không cung cấp tiêu đề HSTS (hoặc đã áp dụng lệnh chuyển hướng tạm thời từ HTTP sang HTTPS).
  • Việc đặt lệnh includeSubDomains sẽ 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ệc google.com gửi tiêu đề HSTS có chứa lệnh includeSubDomains cũng sẽ thực thi tiêu đề HSTS trên mail.google.com.
  • Việc đặt lệnh preload và gửi miền đến dịch vụ tải trước HSTS sẽ biên dịch miền thành tệp nhị phân của trình duyệt sử dụng danh sách HSTS được tải trước (không chỉ 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 hiệu quả trong khoảng thời gian được đặt trong lệnh max-age. Có thể lâu hơn nữa nếu bạn áp dụng lệnh preload.

Để giảm thiểu rủi ro liên quan đến việc triển khai, bạn nên áp dụng phương pháp theo giai đoạn:

  1. Bắt đầu với một max-age nhỏ và chỉ thêm includeSubDomains (không có preload):

    max-age=3600; includeSubDomains
    
  2. Sau một khoảng thời gian chờ (ví dụ: 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; includeSubDomains
    
  3. Nếu giai đoạn ban đầu này thành công trong một khoảng thời gian dài (ví dụ: 3 tháng), thì bạn nên thêm trang web và các miền con của trang web đó vào danh sách tải trước HSTS và thêm lệnh preload.

    max-age=63072000; includeSubDomains; preload