Defaults.Exposed

Defaults.ExposedCách khắc phục › HSTS (Strict-Transport-Security)

Cách khắc phục HSTS (Strict-Transport-Security)

HSTS là một hướng dẫn một dòng website của bạn cung cấp cho mọi trình duyệt: 'luôn quay lại với tôi qua kết nối an toàn, mã hóa — không bao giờ là kết nối không an toàn.' Không có nó, ổ khóa của bạn có thể bị âm thầm loại bỏ trên WiFi chia sẻ, và chính lần ghé thăm đầu tiên website của bạn bị phơi lộ.

Điểm mấu chốt với doanh nghiệp bạn: Có HTTPS (ổ khóa) không giống với việc thực thi nó. Không có HSTS, kẻ tấn công trên cùng WiFi với khách hàng của bạn có thể âm thầm hạ cấp kết nối xuống HTTP thuần, không mã hóa — chụp thông tin đăng nhập, thông tin thẻ và dữ liệu form trong khi khách hàng không thấy gì sai. Chứng chỉ SSL của bạn, thứ bạn có thể đang trả tiền, bị vượt qua. Bản sửa miễn phí và mất khoảng 15 phút cho người chạy website của bạn.

Điều này có thể gây thiệt hại gì

Tại sao điều này quan trọng. HTTPS bảo vệ kết nối sau khi được mã hóa — nhưng nó không ép trình duyệt dùng nó. Kẻ tấn công khai thác khoảng cách đó bằng 'SSL stripping': trên bất kỳ mạng chia sẻ nào họ âm thầm giữ khách truy cập trên HTTP không an toàn, đọc mọi thứ. HSTS nói với trình duyệt từ chối HTTP thuần cho tên miền của bạn hoàn toàn, trong thời gian dài, vì vậy khoảng cách đóng lại sau lần ghé thăm đầu tiên. Đây là một response header duy nhất, miễn phí để thêm, và trong tính điểm của chúng tôi nó đáng điểm thật vì giá trị thiếu hoặc quá ngắn để mọi khách truy cập trên WiFi công cộng bị phơi lộ.

Thực ra nó là gì, giải thích đơn giản

Bạn gần như chắc chắn có HTTPS — ổ khóa nhỏ trong thanh địa chỉ trình duyệt. Tốt. Nhưng đây là phần hầu như không ai được nói: có HTTPS không giống với việc thực thi nó.

HTTPS làm cho kết nối được mã hóa một khi trình duyệt quyết định dùng nó. HSTS — viết tắt của HTTP Strict Transport Security — là hướng dẫn làm cho trình duyệt luôn luôn dùng nó. Đây là một dòng vô hình website của bạn gửi đến mọi khách truy cập nói, thực chất:

“Từ bây giờ, cho tên miền của tôi, chỉ nói chuyện với tôi qua kết nối an toàn. Không bao giờ là kết nối không an toàn. Đừng thậm chí thử.”

Trình duyệt nhớ điều đó và tuân theo trong suốt thời gian bạn bảo — thường là một năm. Sau lần ghé an toàn đầu tiên của khách truy cập, trình duyệt của họ sẽ đơn giản từ chối tải website của bạn qua HTTP thuần, không mã hóa, ngay cả khi có thứ gì đó cố ép nó.

Không có HSTS, quy tắc “luôn dùng phiên bản an toàn” đó không tồn tại — và kẻ tấn công biết chính xác cách khai thác khoảng cách.

Điều này có thể khiến bạn mất gì

Đây là những kịch bản thực tế, hàng ngày. Chúng tôi không bao giờ nêu tên doanh nghiệp thật; đây là minh họa về cách khoảng cách được sử dụng.

  1. Thanh toán quán cà phê. Khách hàng mở cửa hàng của bạn trên WiFi quán cà phê và tiến hành thanh toán. Kẻ tấn công trên cùng mạng chạy công cụ miễn phí, nổi tiếng giữ khách hàng trên HTTP thuần thay vì HTTPS. Khách hàng thấy website bình thường — không có cảnh báo, không ổ khóa hỏng ở chỗ họ nhìn — và gõ thông tin thẻ. Kẻ tấn công đọc từng keystroke. Chứng chỉ SSL của bạn không làm gì, vì kết nối không bao giờ được phép trở nên an toàn.

  2. Nhân viên đi đường. Nhân viên đăng nhập vào bảng admin hoặc webmail từ khách sạn hoặc sân bay. Mánh khóe downgrade tương tự chụp tên người dùng và mật khẩu. Bây giờ kẻ tấn công có đường vào doanh nghiệp của bạn — không phải vì chính sách mật khẩu của bạn yếu, mà vì trang đăng nhập có thể truy cập qua HTTP không an toàn.

  3. Thỏa thuận đình trệ. Khách hàng lớn hơn gửi cho bạn bảng câu hỏi bảo mật tiêu chuẩn trước khi ký. Một dòng hỏi: “Website của bạn có thực thi HTTPS qua HSTS không?” Người IT của bạn phải trả lời “không,” và quy trình mua sắm tạm dừng trong khi bạn vội vàng sửa cài đặt miễn phí, 15 phút mà giờ trông như dấu đỏ trước người mua.

  4. Kiểm tra cyber-insurance hoặc tuân thủ. Quét của nhà bảo hiểm, hoặc kiểm toán viên xem xét tư thế bảo vệ dữ liệu của bạn, gắn cờ header thiếu. Mã hóa dữ liệu cá nhân là kỳ vọng rõ ràng theo luật bảo vệ dữ liệu (GDPR Điều 32), và “chúng tôi có chứng chỉ nhưng không thực thi nó” là vị trí yếu.

  5. Cảm giác an toàn giả. Bạn đang trả tiền cho SSL, ổ khóa hiển thị, và mọi người cho rằng website an toàn. Hầu hết thời gian thì đúng — cho đến khi khách hàng ở trên mạng chia sẻ, đó chính xác là khi họ dễ bị tổn thương nhất và ít có khả năng nhận thấy gì sai.

Điểm chung: chi phí không phải trừu tượng. Đây là thẻ hoặc thông tin đăng nhập thật của khách hàng thật, bị chụp vào thời điểm tệ nhất, không có chuông báo động nào đổ.

Thực ra nó là gì

Khi trình duyệt yêu cầu website của bạn một trang, máy chủ của bạn gửi lại trang cộng với một số “header” vô hình — hướng dẫn thêm trình duyệt đọc nhưng khách truy cập không bao giờ thấy. HSTS là một trong những header đó:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Ba phần quan trọng:

Tại sao “lần ghé đầu tiên” quan trọng

HSTS có một giới hạn cố hữu: trình duyệt chỉ tuân theo quy tắc sau khi đã thấy header ít nhất một lần. Vì vậy lần kết nối đầu tiên của khách truy cập mới vẫn là cửa sổ phơi lộ nhỏ. Hai thứ thu hẹp nó: chuyển hướng HTTP-sang-HTTPS (đưa họ nhanh sang phiên bản an toàn) và preload (xóa cửa sổ hoàn toàn). Đó là lý do tại sao thiết lập hoàn chỉnh kết hợp HSTS với chuyển hướng đúng.

”Tốt” trông như thế nào — và cách tính điểm

Kiểm tra của chúng tôi đọc header trực tiếp và tính điểm max-age:

Giá trị max-ageÝ nghĩaKết quả
1 năm hoặc hơn (≥ 31536000)Xuất sắc — cài đặt được khuyến nghịĐiểm đầy đủ
6 tháng hoặc hơn (≥ 15768000)Tốt, nhưng không đủ một nămMột phần
1 ngày hoặc hơn (≥ 86400)Yếu — quá ngắn để đáng tinThấp / một phần
Dưới 1 ngày, hoặc không có headerThực tế không có bảo vệThất bại (nghiêm trọng cao)

Vì vậy header tồn tại nhưng được đặt vài phút được coi là thất bại — nó trông được cấu hình nhưng không làm được việc. Đặt mục tiêu một năm. Kiểm tra cũng ghi nhận includeSubDomainspreload có hiện diện không.

Cách sửa (miễn phí, ~15 phút)

Chuyển phần này cho người chạy website — người IT, nhà phát triển web, hoặc hỗ trợ hosting. Bản sửa miễn phí. Đây là một header duy nhất, hoặc toggle trong nền tảng hosting. Không có gì cần mua.

Một quy tắc thứ tự quan trọng trước: HSTS có tính nhớ dài — sau khi bật, trình duyệt sẽ từ chối HTTP thuần cho tên miền của bạn trong suốt max-age đầy đủ. Vì vậy xác nhận HTTPS hoạt động đúng trên website chính và mọi tên miền phụ trước khi bật nó rộng rãi. Con đường an toàn là: thử với giá trị ngắn → xác nhận không có gì hỏng → nâng lên một năm.

Bước 1 — Đảm bảo HTTPS đã hoạt động khắp nơi

Truy cập website của bạn và các tên miền phụ chính qua https:// và xác nhận chúng tải sạch với chứng chỉ hợp lệ. Cũng xác nhận yêu cầu http:// thuần chuyển hướng sang https://. (Nếu không, sửa chuyển hướng HTTP-sang-HTTPS trước — HSTS giả định nó đã có.)

Bước 2 — Thêm header (chọn nền tảng của bạn)

Cloudflare (hoặc CDN tương tự): Đây là dễ nhất. Đến SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) và bật nó. Đặt Max-Age thành 6 tháng hoặc 12 tháng, và bật “Apply HSTS policy to subdomains” sau khi bạn chắc chắn tất cả tên miền phụ đang trên HTTPS.

Nginx: thêm bên trong HTTPS server block:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

Apache: đảm bảo mod_headers được bật, sau đó thêm vào HTTPS virtual host:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Microsoft IIS: thêm vào web.config bên trong <customHeaders>:

<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />

Lưu ý Google Workspace / Microsoft 365: những thứ này chạy email của bạn, không phải website hosting — HSTS được đặt bất cứ nơi nào website công khai của bạn thực sự sống (CDN, máy chủ web hoặc site builder), không phải trong bảng admin Workspace/365.

Bước 3 — Thử nhỏ, sau đó cam kết

Bắt đầu với max-age=300 (5 phút). Xác nhận website vẫn tải hoàn hảo ở mọi nơi. Sau đó nâng lên max-age=31536000 (một năm). Đó là cài đặt điểm đầy đủ.

Bước 4 (tùy chọn, tiêu chuẩn vàng) — preload

Sau khi bạn tự tin và đã chạy header một năm với includeSubDomains một thời gian, bạn có thể gửi tên miền tại hstspreload.org để được bao bọc vào trình duyệt. Điều này đóng cửa sổ lần ghé đầu hoàn toàn. Coi nó là cam kết có chủ ý — xóa tên miền khỏi danh sách thì chậm.

Các lỗi phổ biến

FAQ

Chúng tôi đã có HTTPS và ổ khóa hiển thị. Vậy chưa đủ sao?

Không — và đây là hiểu nhầm phổ biến nhất. Ổ khóa có nghĩa là kết nối CÓ THỂ được mã hóa; nó không ép trình duyệt dùng phiên bản mã hóa. Không có HSTS, kẻ tấn công trên cùng mạng có thể giữ khách truy cập trên HTTP thuần (gọi là SSL stripping) và đọc mọi thứ họ gõ, trong khi khách hàng thấy website trông bình thường. HSTS là hướng dẫn làm cho 'chỉ mã hóa' bắt buộc. HTTPS không có HSTS là cửa có ổ khóa không thực sự được chốt.

Điều này có đắt hoặc rủi ro khi bật không?

Bản sửa miễn phí — đây là một dòng trong máy chủ web hoặc toggle trong CDN — và mất khoảng 15 phút. Thận trọng thật duy nhất: HSTS có tính nhớ dài. Sau khi trình duyệt thấy nó, trình duyệt sẽ từ chối HTTP thuần cho tên miền của bạn trong suốt thời gian bạn đã chỉ định. Vì vậy bạn phải tự tin HTTPS hoạt động trên website chính và mọi tên miền phụ trước khi bật nó rộng rãi. Bắt đầu với giá trị ngắn thử, xác nhận không có gì hỏng, sau đó nâng lên một năm. Làm theo thứ tự đó, rủi ro rất nhỏ.

'Tốt' thực sự trông như thế nào?

max-age ít nhất một năm (31536000 giây). Kiểm tra của chúng tôi trao điểm đầy đủ ở một năm hoặc hơn, điểm một phần ở sáu tháng, yếu/một phần ở một ngày, và coi bất cứ thứ gì dưới một ngày là không có thực chất. Cài đặt mạnh nhất cũng thêm includeSubDomains (bao gồm shop.yoursite.com, app.yoursite.com, v.v.) và preload (bao bọc bảo vệ vào trình duyệt để ngay cả lần ghé đầu tiên cũng an toàn).

'Preload' là gì và chúng tôi có cần nó không?

HSTS chỉ bảo vệ khách truy cập SAU KHI trình duyệt của họ đã thấy header ít nhất một lần — vì vậy yêu cầu đầu tiên của khách truy cập mới vẫn là cửa sổ phơi lộ nhỏ. Danh sách preload HSTS, được tích hợp vào Chrome, Firefox, Safari và Edge, đóng cửa sổ đó bằng cách gửi tên miền của bạn đến trình duyệt trước. Đây là tùy chọn và cam kết hơi lớn hơn (xóa thì chậm), nhưng là tiêu chuẩn vàng. Với hầu hết doanh nghiệp nhỏ, max-age một năm với includeSubDomains đã là kết quả mạnh, an toàn; preload là bước thêm khi bạn đã ổn định.

Chúng tôi đang dùng Squarespace / Wix / Shopify — chúng tôi có cần làm gì không?

Hầu hết website builder được lưu trữ đầy đủ (Squarespace, Wix, Shopify và tương tự) thực thi HTTPS và thường đặt HSTS cho bạn tự động — vì vậy bạn có thể đã đạt mà không cần làm gì. Ngoại lệ là khi bạn dùng tên miền tùy chỉnh hoặc CDN trước website; sau đó cài đặt có thể bị bỏ sót. Chạy kiểm tra: nếu đạt, bạn xong. Nếu gắn cờ, bản sửa là toggle trong cài đặt SSL/bảo mật của nền tảng, hoặc một dòng tại CDN.

Nếu chúng tôi không sửa, điểm của chúng tôi có giảm không?

Có. HSTS là kiểm tra bảo mật web có điểm, không phải thông tin — header thiếu hoặc quá ngắn tốn điểm và được đánh giá nghiêm trọng cao, vì nó trực tiếp phơi lộ dữ liệu khách truy cập trên mạng chia sẻ. Nó cũng là một trong những điểm rẻ nhất để lấy lại: một header miễn phí duy nhất, khoảng 15 phút làm việc.