BBC đang triển khai HSTS cho trang web của họ để cải thiện hiệu suất và bảo mật. Tìm hiểu ý nghĩa và cách HSTS có thể giúp bạn.
Việc sử dụng HTTPS đang tăng đều đặn trong những năm gần đây. Theo Niên giám web năm 2021 của Lưu trữ HTTP, khoảng 91% trong số tất cả yêu cầu cho cả máy tính và thiết bị di động đều được phân phát qua HTTPS. HTTPS không chỉ là một giải pháp tạm thờ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/2 và HTTP/3.
Gần đây, Leonard Craig, một Kiến trúc sư kỹ thuật trưởng tại BBC, đã tweet rằng HTTP Strict Transport Security (HSTS) đang dần được triển khai cho bbc.com. Tìm hiểu xem điều đó có ý nghĩa gì đối với BBC và những thay đổi này có thể có ý nghĩa gì đối với bạn.
Vấn đề
Các máy chủ web thường lắng nghe 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 443 dành cho HTTPS an toàn. Đ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 hướng lưu lượng truy cập đến phiên bản HTTP không an toàn của một trang web vì các lý do cũ (mặc dù không phải lúc nào cũng vậy).
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 một trang web là đặt lệnh chuyển hướng từ HTTP đến HTTPS cho tất cả các yêu cầu. Điều này chắc chắn hiệu quả, nhưng nó sẽ khởi động chuỗi sự kiện sau đây:
- Máy chủ nhận được yêu cầu HTTP.
- Máy chủ đưa ra lệnh chuyển hướng để đến trang HTTPS tương đương với tài nguyên được yêu cầu.
- Máy chủ phải thương lượng kết nối bảo mật với trình duyệt.
- Nội dung sẽ tải như bình thường.
Tuy các lệnh chuyển hướng vẫn hoạt động bình thường, nhưng chúng có thể bị định cấu hình sai theo 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, vẫn còn một vấn đề bảo mật là người dùng vẫn sẽ kết nối qua HTTP không an toàn trong giai đoạn chuyển hướng. Giai đoạn này khiến người dùng có nguy cơ bị tấn công xen giữa nguy hiểm.
Nhập HSTS
HSTS do tiêu đề phản hồi HTTP Strict-Transport-Security
quyết định cho các yêu cầu HTTPS. Khi bạn đặt chính sách này, lượt truy cập quay lại một trang web sẽ kích hoạt lệnh chuyển hướng đặc biệt (được gọi là "307 Internal Redirect", đó là khi trình duyệt xử lý logic chuyển hướng chứ không phải máy chủ. Việc này giúp ngăn chặn việc 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 an toàn hơn. Ngoài ra, các loại chuyển hướng này hoạt động cực kỳ nhanh, do đó, mọi độ trễ đáng chú ý trong quá trình chuyển từ HTTP sang HTTPS đều được loại bỏ.
Tương tự như lệnh max-age
của Cache-Control
, tiêu đề HSTS chỉ định lệnh max-age
. Lệnh này nhận một giá trị tính bằng giây để xác định khoảng thời gian có hiệu lực của chính sách đối với:
Strict-Transport-Security: max-age=3600
Trong ví dụ trước, chính sách chỉ có hiệu lực trong vòng 1 giờ.
Triển khai HSTS
Nhược điểm chính của việc triển khai HSTS là bạn chưa sẵn sàng coi nguồn gốc của mình là an toàn tuyệt đối. Giả sử bạn có một số miền con mà bạn đang phân phát tài nguyên, nhưng có thể không phải tất cả các miền con đó đề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ư Neal Craig đã đề cập trong bài đăng trên Twitter, giá trị ban đầu được đặt cho bbc.com là max-age=10
.
Cách tiếp cận này có nghĩa là chính sách chỉ có hiệu lực ban đầu trong 10 giây. Điều này không mang lại nhiều lợi ích, nhưng mục tiêu là xác định xem có vấn đề gì khi áp dụng HSTS hay không. Trong tương lai, bạn có thể tăng dần chính sách này và xem liệu có xảy ra vấn đề hay không. Tại thời điểm viết bài này, bbc.com đang chỉ định chính sách HSTS của max-age=86400
và chính sách này gần như chắc chắn sẽ tăng theo thời gian.
Bạn chắc chắn không muốn sử dụng một giá trị max-age
dài để xuất hiện khi triển khai HSTS. Bạn có thể thấy mình đột nhiên phải xáo trộn để khắc phục sự cố trong khi người dùng gặp sự cố. Hãy bắt đầu từ quy mô nhỏ và tăng dần theo thời gian! Khi đã chắc chắn rằng mọi thứ đều ổn, bạn có thể đặt lệnh max-age
thành một khoảng thời gian dài hơn nhiều. Bạn nên đặt max-age
thành một hoặc hai năm khi ứng dụng ra mắt đầy đủ.
Thao tác 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ần đầu tiên truy cập vào trang web, do đó, bạn không thể hưởng lợi ích trong lần truy cập đầu tiên vào trang web. Chế độ này vẫn sẽ yêu cầu lệnh 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 đến danh sách tải trước HSTS. Đây là một danh sách được cố định giá trị trong mã của các trang web mà trình duyệt biết chính xác là 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à lệnh chuyển hướng từ HTTP sang HTTPS sẽ diễn ra ngay lập tức.
Hãy thử tự làm
Nếu BBC cảm thấy thoải mái khi thử nghiệm HSTS, bạn cũng có thể làm như vậy cho trang web của mình. Hãy dùng thử tính năng này cho trang web của bạn. Nếu bạn muốn tăng tốc – hãy thêm công cụ này vào danh sách tải trước HSTS khi bạn tự tin rằng không có lỗi để cung cấp cho người dùng trải nghiệm an toàn hơn và nhanh hơn.