Cách BBC triển khai HSTS để cải thiện hiệu suất và khả năng bảo mật.

BBC đang triển khai HSTS cho trang web của họ để cải thiện hiệu suất và tính bảo mật. Hãy tìm hiểu ý nghĩa và cách HSTS có thể trợ giúp bạn.

Việc sử dụng HTTPS ngày càng tăng đều trong những năm gần đây. Theo Niên giám web năm 2021 của Kho lưu trữ HTTP, khoảng 91% số yêu cầu cho cả máy tính và thiết bị di động được phân phát qua HTTPS. HTTPS không chỉ là tồn tại, mà còn là điều kiện tiên quyết cần thiết để sử dụng các tính năng như Service Worker và các giao thức hiện đại như HTTP/2HTTP/3.

Gần đây, Neil Craig – một Kiến trúc sư kỹ thuật trưởng tại BBC – đã chia sẻ rằng HTTP Strict Transport Security (HSTS) đang dần được triển khai cho bbc.com. Hãy cùng tìm hiểu xem điều đó có ý nghĩa gì với BBC và điều đó có ý nghĩa gì đối với bạn.

Vấn đề

Các máy chủ web thường theo dõi các yêu cầu trên cả hai cổng 80 và 443. Cổng 80 dành cho các yêu cầu HTTP không an toàn, trong khi cổng 443 dành cho các yêu cầu HTTP bảo mật. Điều này có thể gây ra vấn đề vì khi bạn nhập một địa chỉ vào thanh địa chỉ mà không có tiền tố giao thức https:// (như hầu hết người dùng thường làm), một số trình duyệt sẽ chuyển lưu lượng truy cập đến phiên bản HTTP không an toàn của trang web vì lý do cũ (mặc dù điều này không phải lúc nào cũng đúng).

Một cách phổ biến để đảm bảo người dùng không truy cập vào phiên bản không an toàn của trang web là đặt lệnh chuyển hướng từ HTTP sang HTTPS cho tất cả các yêu cầu. Điều này chắc chắn có hiệu quả, nhưng nó khởi động chuỗi sự kiện sau đây:

  1. Máy chủ nhận một yêu cầu qua HTTP.
  2. Máy chủ đưa ra lệnh chuyển hướng để chuyển đến HTTPS tương đương với tài nguyên được yêu cầu.
  3. Máy chủ thông qua HTTPS phải thương lượng kết nối bảo mật với trình duyệt.
  4. Nội dung tải như bình thường.

Mặc dù hoạt động tốt, nhưng các lệnh chuyển hướng vẫn có thể bị định cấu hình sai theo những cách vẫn cho phép truy cập vào phiên bản không an toàn của trang web. Ngay cả khi mọi thứ được định cấu hình đúng cách, thì vẫn còn một vấn đề bảo mật là người dùng vẫn kết nối qua HTTP không an toàn trong giai đoạn chuyển hướng. Điều này khiến người dùng có nguy cơ xảy ra tấn công xen giữa.

Nhập HSTS

Hỗ trợ trình duyệt

  • 4
  • 12
  • 4
  • 7

Nguồn

HSTS được quy định bởi tiêu đề phản hồi HTTP Strict-Transport-Security đối với các yêu cầu HTTPS. Khi bạn thiết lập chính sách này, các lượt truy cập trở lại vào một trang web sẽ kích hoạt một lệnh chuyển hướng đặc biệt được gọi là "307 Content Redirect", tức là khi trình duyệt xử lý logic chuyển hướng chứ không phải máy chủ. Phương pháp này ngăn yêu cầu bị chặn vì yêu cầu không bao giờ rời khỏi trình duyệt, do đó, yêu cầu sẽ an toàn hơn. Thêm vào đó, những loại chuyển hướng này cực kỳ nhanh, vì vậy, mọi độ trễ đáng kể trong quá trình nhảy HTTP-to-HTTPS đều được loại bỏ.

Lệnh chuyển hướng nội bộ 307 từ HTTP sang HTTPS, được kích hoạt bởi tiêu đề HSTS. Lệnh chuyển hướng 307 chỉ mất 2 mili giây.

Tương tự như cú pháp cho lệnh max-age của Cache-Control, tiêu đề HSTS chỉ định một lệnh max-age. Lệnh này có một giá trị tính bằng giây để chỉ định khoảng thời gian chính sách có hiệu lực trong:

Strict-Transport-Security: max-age=3600

Trong ví dụ trên, chính sách chỉ có hiệu lực trong một giờ.

Triển khai HSTS

Hạn chế chính của việc triển khai HSTS là nếu bạn chưa sẵn sàng xử lý nghiêm ngặt nguồn gốc của mình. Giả sử bạn đang phân phối tài nguyên từ một số miền con nhưng có thể không phải tất cả miền con này đều an toàn. Trong trường hợp này, tiêu đề HSTS có thể làm hỏng trang web của bạn.

BBC đã áp dụng phương pháp phù hợp để triển khai HSTS. Như Neil Craig đã đề cập trong dòng tweet của mình, giá trị ban đầu được đặt cho bbc.com là max-age=10.

Phương pháp này có nghĩa là chính sách ban đầu chỉ có hiệu lực trong 10 giây. Việc này không mang lại nhiều lợi ích, nhưng bạn cần cảm nhận xem liệu có thể có vấn đề khi áp dụng HSTS hay không. Theo thời gian, bạn có thể tăng dần chính sách và xem có vấn đề nào xảy ra không. Tại thời điểm viết bài này, bbc.com đang chỉ định chính sách HSTS cho max-age=86400 và chính sách này gần như chắc chắn sẽ tăng lên theo thời gian.

Bạn chắc chắn không muốn ra khỏi cổng với giá trị max-age dài khi triển khai HSTS. Bạn có thể đột nhiên phải tìm cách khắc phục vấn đề trong khi người dùng gặp phải vấn đề. Hãy bắt đầu từ quy mô nhỏ và tăng dần theo thời gian! Khi đã chắc chắn mọi thứ đều ổn, bạn có thể đặt lệnh max-age trong một khoảng thời gian dài hơn nhiều. Bạn nên đặt max-age thành 1 hoặc 2 năm khi được phát hành đầy đủ.

Di chuyển ban đầu nhanh hơn và an toàn hơn nhờ danh sách tải trước HSTS

Chính sách HSTS chỉ có hiệu lực sau lượt truy cập đầu tiên vào trang web, vì vậy, các lợi ích sẽ không xuất hiện trong lượt truy cập đầu tiên vào trang web. Bạn vẫn sẽ phải chuyển hướng không an toàn. Tuy nhiên, bạn có thể tải trước chính sách HSTS bằng cách gửi trang web của bạn vào danh sách tải trước HSTS. Đây là danh sách các trang web được mã hoá cứng mà trình duyệt biết là hoàn toàn HTTPS. Khi trang web của bạn nằm trong danh sách tải trước, lượt truy cập đầu tiên cũng được bảo vệ và độ trễ chuyển hướng từ HTTP sang HTTPS qua HSTS sẽ diễn ra ngay lập tức.

Dùng thử

Nếu BBC cảm thấy thoải mái khi thử nghiệm HSTS, bạn có thể làm như vậy cho trang web của mình. Hãy thử dùng tính năng này cho trang web của bạn và nếu bạn muốn cải thiện mọi thứ, hãy thêm giao thức này vào danh sách tải trước HSTS khi bạn chắc chắn rằng không có lỗi để cung cấp cho người dùng trải nghiệm an toàn hơn nhanh hơn.