Khắc phục nội dung hỗn hợp

Jo-el van Bergen
Jo-el van Bergen

Hỗ trợ HTTPS cho trang web là một bước quan trọng để bảo vệ trang web và người dùng của bạn khỏi bị tấn công, nhưng nội dung hỗn hợp có thể khiến biện pháp bảo vệ đó trở nên vô dụng. Nội dung hỗn hợp ngày càng không an toàn sẽ bị trình duyệt chặn, như đã giải thích trong phần Nội dung hỗn hợp là gì?

Trong hướng dẫn này, chúng tôi sẽ minh hoạ các kỹ thuật và công cụ để khắc phục các vấn đề hiện có về nội dung hỗn hợp và ngăn chặn các vấn đề mới xảy ra.

Tìm nội dung hỗn hợp bằng cách truy cập vào trang web của bạn

Khi bạn truy cập vào một trang HTTPS trong Google Chrome, trình duyệt sẽ cảnh báo bạn về nội dung hỗn hợp dưới dạng lỗi và cảnh báo trong bảng điều khiển JavaScript.

Trong phần Nội dung hỗn hợp là gì?, bạn có thể tìm thấy một số ví dụ và xem cách báo cáo vấn đề trong Chrome DevTools.

Ví dụ về nội dung hỗn hợp thụ động đưa ra các cảnh báo sau. Nếu trình duyệt có thể tìm thấy nội dung tại một URL https, thì trình duyệt sẽ tự động nâng cấp URL đó, sau đó hiện một thông báo.

Chrome DevTools cho thấy các cảnh báo xuất hiện khi phát hiện và nâng cấp nội dung hỗn hợp

Nội dung hỗn hợp đang hoạt động sẽ bị chặn và hiển thị cảnh báo.

Chrome DevTools hiển thị cảnh báo khi nội dung hỗn hợp đang hoạt động bị chặn

Nếu bạn thấy những cảnh báo như thế này cho http:// URL trên trang web của mình, bạn cần khắc phục chúng trong nguồn của trang web. Bạn nên lập danh sách các URL này cùng với trang mà bạn tìm thấy chúng để sử dụng khi khắc phục.

Tìm nội dung hỗn hợp trên trang web của bạn

Bạn có thể tìm kiếm nội dung hỗn hợp ngay trong mã nguồn của mình. Tìm http:// trong nguồn của bạn và tìm các thẻ có thuộc tính URL loại HTTP. Xin lưu ý rằng việc có http:// trong thuộc tính href của thẻ ký tự liên kết (<a>) thường không phải là vấn đề về nội dung hỗn hợp, ngoại trừ một số trường hợp ngoại lệ đáng chú ý sẽ được thảo luận sau.

Nếu trang web của bạn được xuất bản bằng một hệ thống quản lý nội dung, thì có thể các đường liên kết đến URL không an toàn sẽ được chèn vào khi trang được xuất bản. Ví dụ: hình ảnh có thể được đưa vào bằng một URL đầy đủ thay vì đường dẫn tương đối. Bạn cần tìm và khắc phục những lỗi này trong nội dung của CMS.

Khắc phục nội dung hỗn hợp

Sau khi tìm thấy nội dung hỗn hợp trong nguồn của trang web, bạn có thể làm theo các bước sau để khắc phục.

Nếu nhận được thông báo trên bảng điều khiển cho biết một yêu cầu tài nguyên đã được tự động nâng cấp từ HTTP lên HTTPS, bạn có thể thay đổi URL http:// cho tài nguyên trong mã của mình thành https:// một cách an toàn. Bạn cũng có thể kiểm tra xem một tài nguyên có được cung cấp một cách an toàn hay không bằng cách thay đổi http:// thành https:// trong thanh URL của trình duyệt và thử mở URL đó trong một thẻ trình duyệt.

Nếu tài nguyên không có sẵn thông qua https://, bạn nên cân nhắc một trong các lựa chọn sau:

  • Thêm tài nguyên từ một máy chủ lưu trữ khác (nếu có).
  • Tải xuống và lưu trữ nội dung trực tiếp trên trang web của bạn, nếu bạn được phép làm như vậy theo luật.
  • Loại trừ hoàn toàn tài nguyên khỏi trang web của bạn.

Sau khi khắc phục vấn đề, hãy xem trang mà bạn phát hiện lỗi ban đầu và xác minh rằng lỗi không còn xuất hiện nữa.

Cẩn thận khi sử dụng thẻ không theo tiêu chuẩn

Hãy lưu ý đến việc sử dụng thẻ không chuẩn trên trang web của bạn. Ví dụ: URL thẻ liên kết (<a>) không gây ra lỗi nội dung hỗn hợp vì chúng khiến trình duyệt chuyển đến một trang mới. Điều này có nghĩa là bạn thường không cần phải khắc phục những vấn đề này. Tuy nhiên, một số tập lệnh thư viện hình ảnh ghi đè chức năng của thẻ <a> và tải tài nguyên HTTP do thuộc tính href chỉ định vào màn hình hộp đèn trên trang, gây ra vấn đề về nội dung hỗn hợp.

Xử lý nội dung hỗn hợp trên quy mô lớn

Các bước thủ công nêu trên phù hợp với những trang web nhỏ hơn; nhưng đối với các trang web lớn hoặc trang web có nhiều nhóm phát triển riêng biệt, bạn có thể gặp khó khăn trong việc theo dõi tất cả nội dung đang được tải. Để hỗ trợ việc này, bạn có thể sử dụng chính sách bảo mật nội dung để hướng dẫn trình duyệt thông báo cho bạn về nội dung hỗn hợp và đảm bảo rằng các trang của bạn không bao giờ tải tài nguyên không an toàn một cách không mong muốn.

Chính sách bảo mật nội dung

Chính sách bảo mật nội dung (CSP) là một tính năng đa năng của trình duyệt mà bạn có thể dùng để quản lý nội dung hỗn hợp trên quy mô lớn. Bạn có thể sử dụng cơ chế báo cáo CSP để theo dõi nội dung hỗn hợp trên trang web của mình, và cung cấp các chính sách thực thi để bảo vệ người dùng bằng cách nâng cấp hoặc chặn nội dung hỗn hợp.

Bạn có thể bật các tính năng này cho một trang bằng cách thêm tiêu đề Content-Security-Policy hoặc Content-Security-Policy-Report-Only vào phản hồi được gửi từ máy chủ của bạn. Ngoài ra, bạn có thể đặt Content-Security-Policy (nhưng không đặt Content-Security-Policy-Report-Only) bằng cách sử dụng thẻ <meta> trong phần <head> của trang.

Tìm nội dung hỗn hợp bằng chính sách bảo mật nội dung

Bạn có thể sử dụng chính sách bảo mật nội dung để thu thập báo cáo về nội dung hỗn hợp trên trang web của mình. Để bật tính năng này, hãy đặt lệnh Content-Security-Policy-Report-Only bằng cách thêm lệnh này làm tiêu đề phản hồi cho trang web của bạn.

Tiêu đề phản hồi:

Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/reportingEndpoint

Mỗi khi người dùng truy cập vào một trang trên trang web của bạn, trình duyệt của họ sẽ gửi báo cáo ở định dạng JSON về mọi nội dung vi phạm chính sách bảo mật nội dung đến https://example.com/reportingEndpoint. Trong trường hợp này, bất cứ khi nào tài nguyên phụ được tải qua HTTP, báo cáo sẽ được gửi. Các báo cáo này bao gồm URL trang nơi xảy ra lỗi vi phạm chính sách và URL tài nguyên phụ vi phạm chính sách. Nếu định cấu hình điểm cuối báo cáo để ghi lại các báo cáo này, bạn có thể theo dõi nội dung hỗn hợp trên trang web của mình mà không cần tự truy cập vào từng trang.

Có hai điều cần lưu ý:

  • Người dùng phải truy cập vào trang của bạn bằng một trình duyệt hiểu được tiêu đề CSP. Điều này đúng với hầu hết các trình duyệt hiện đại.
  • Bạn chỉ nhận được báo cáo cho những trang mà người dùng của bạn truy cập. Vì vậy, nếu bạn có những trang không nhận được nhiều lưu lượng truy cập, thì có thể phải mất một thời gian bạn mới nhận được báo cáo cho toàn bộ trang web của mình.

Hướng dẫn về Chính sách bảo mật nội dung có thêm thông tin và một điểm cuối mẫu.

Các giải pháp thay thế cho việc báo cáo bằng CSP

Nếu trang web của bạn được lưu trữ trên một nền tảng như Blogger, thì có thể bạn không có quyền sửa đổi tiêu đề và thêm CSP. Thay vào đó, bạn có thể sử dụng trình thu thập dữ liệu trang web để tìm vấn đề trên trang web của mình, chẳng hạn như HTTPSChecker hoặc Mixed Content Scan.

Nâng cấp các yêu cầu không an toàn

Browser Support

  • Chrome: 44.
  • Edge: 17.
  • Firefox: 48.
  • Safari: 10.1.

Source

Các trình duyệt đang bắt đầu nâng cấp và chặn các yêu cầu không an toàn. Bạn có thể sử dụng các lệnh CSP để buộc tự động nâng cấp hoặc chặn các thành phần này.

Lệnh upgrade-insecure-requests của CSP hướng dẫn trình duyệt nâng cấp các URL không an toàn trước khi đưa ra yêu cầu mạng.

Ví dụ: nếu một trang chứa thẻ hình ảnh có URL loại HTTP như <img src="https://example.com/image.jpg">

Thay vào đó, trình duyệt sẽ đưa ra yêu cầu an toàn cho https://example.com/image.jpg, nhờ đó giúp người dùng tránh được nội dung hỗn hợp.

Bạn có thể bật hành vi này bằng cách gửi tiêu đề Content-Security-Policy kèm theo lệnh sau:

Content-Security-Policy: upgrade-insecure-requests

Hoặc bằng cách nhúng cùng một lệnh đó vào phần <head> của tài liệu bằng phần tử <meta>:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

Tương tự như tính năng tự động nâng cấp của trình duyệt, nếu tài nguyên không được cung cấp qua HTTPS, thì yêu cầu nâng cấp sẽ không thành công và tài nguyên sẽ không được tải. Điều này giúp duy trì tính bảo mật cho trang của bạn. Chỉ thị upgrade-insecure-requests sẽ tiến xa hơn việc nâng cấp trình duyệt tự động, cố gắng nâng cấp các yêu cầu mà trình duyệt hiện không thực hiện.

Chỉ thị upgrade-insecure-requests sẽ áp dụng cho cả tài liệu <iframe>, đảm bảo toàn bộ trang được bảo vệ.