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

Việc hỗ trợ HTTPS cho trang web là một bước quan trọng để bảo vệ trang web và người dùng khỏi các cuộc tấn công. Tuy nhiên, nội dung hỗn hợp có thể khiến biện pháp bảo vệ đó trở nên vô ích. 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 truy cập vào một trang HTTPS trong Google Chrome, trình duyệt sẽ cảnh báo cho 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 bài viết 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 Công cụ của Chrome cho nhà phát triển.

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

Công cụ của Chrome cho nhà phát triển hiển thị cảnh báo 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.

Công cụ dành cho nhà phát triển của Chrome hiển thị cảnh báo khi nội dung hỗn hợp đang hoạt động bị chặn

Nếu thấy các cảnh báo như vậy cho URL http:// trên trang web của mình, bạn cần khắc phục các cảnh báo đó trong nguồn của trang web. Bạn nên tạo danh sách các URL này cùng với trang mà bạn tìm thấy URL để 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. Tìm http:// trong nguồn của bạn rồi tìm các thẻ có chứa 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ẻ neo (<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 phát hành bằng 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 khi các trang được phát hành. Ví dụ: hình ảnh có thể được đưa vào bằng URL đầy đủ thay vì đường dẫn tương đối. Bạn cần tìm và khắc phục các 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 vấn đề này.

Nếu nhận được thông báo của 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:// của tài nguyên trong mã 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ó sẵn 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 không có tài nguyê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ủ khác (nếu có).
  • Tải và lưu trữ trực tiếp nội dung 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 sự cố, hãy xem trang nơi bạn tìm thấy lỗi ban đầu và xác minh rằng lỗi đó không còn xuất hiện nữa.

Cảnh giác với cách sử dụng thẻ không theo chuẩn

Hãy cẩn thận với việc sử dụng thẻ không chuẩn trên trang web của bạn. Ví dụ: URL của thẻ neo (<a>) không gây ra lỗi nội dung hỗn hợp, vì các URL này 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 khắc phục các lỗi này. Tuy nhiên, một số tập lệnh thư viện hình ảnh sẽ 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 sáng trên trang, gây ra vấn đề 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 ở trên hoạt động hiệu quả đối với các 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ể khó theo dõi tất cả nội dung đang được tải. Để thực hiện nhiệm vụ 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 của trình duyệt đa năng mà bạn có thể sử 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, đồng thời 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 đưa 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 (mặc dù không 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 có 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, mỗi khi một tài nguyên phụ được tải qua HTTP, một báo cáo sẽ được gửi. Các báo cáo này bao gồm URL của trang 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 ý về vấn đề này:

  • 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 về những trang mà người dùng truy cập. Vì vậy, nếu bạn có các trang không nhận được nhiều lưu lượng truy cập, thì có thể bạn sẽ phải chờ một thời gian trước khi nhận được báo cáo cho toàn bộ trang web.

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

Các phương án 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ì bạn có thể không có quyền sửa đổi tiêu đề và thêm CSP. Thay vào đó, bạn có thể sử dụng một trình thu thập dữ liệu trang web để giúp bạn tìm các vấn đề trên trang web, chẳng hạn như HTTPSChecker hoặc Quét nội dung hỗn hợp.

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

Hỗ trợ trình duyệt

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

Nguồn

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 Chính sách bảo mật nội dung (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 HTTP như <img src="http://example.com/image.jpg">

Thay vào đó, trình duyệt sẽ thực hiện một yêu cầu bảo mật cho https://example.com/image.jpg, nhờ đó người dùng không phải xem 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 với lệnh sau:

Content-Security-Policy: upgrade-insecure-requests

Hoặc bằng cách nhúng cùng một lệnh đó cùng dòng trong phần <head> của tài liệu bằng cách sử dụ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 trình duyệt, nếu tài nguyên không có sẵn 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. Việc này giúp duy trì tính bảo mật của trang. Chỉ thị upgrade-insecure-requests sẽ đi xa hơn việc tự động nâng cấp trình duyệt, cố gắng nâng cấp các yêu cầu mà trình duyệt hiện không có.

Lệnh upgrade-insecure-requests sẽ chuyển xuống các tài liệu <iframe>, đảm bảo toàn bộ trang được bảo vệ.