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

Jo-el van Bergen
Jo-el van Bergen

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 của bạn khỏi các cuộc tấn công. Tuy nhiên, nội dung hỗn hợp có thể khiến việc bảo vệ đó trở nên vô ích. Các trình duyệt sẽ chặn nội dung hỗn hợp ngày càng không an toàn, như được 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 vấn đề mới xảy ra.

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

Khi truy cập 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 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 các 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 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 đó, sau đó cho thấy một thông báo.

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

Công cụ của Chrome cho nhà phát triển hiển thị các cảnh báo xuất hiện 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 đó tại nguồn của trang web. Bạn nên tạo một danh sách những URL này cùng với trang mà bạn đã tìm thấy chúng để sử dụng khi sửa lỗi.

Tìm nội dung hỗn hợp trên trang web

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 kiếm http:// trong nguồn của bạn và tìm 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ẻ liên kết (<a>) thường không phải là vấn đề về nội dung hỗn hợp, 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 các URL không an toàn sẽ được chèn vào khi các trang được xuất bản. Ví dụ: hình ảnh có thể được đưa vào với một URL đầy đủ thay vì một đường dẫn tương đối. Bạn sẽ cần tìm và khắc phục các vấn đề này trong nội dung 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ếu nhận được thông báo trên bảng điều khiển cho biết rằng 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ể yên tâm thay đổi URL http:// cho tài nguyên trong mã của mình thành https://. Bạn cũng có thể kiểm tra xem liệu một tài nguyên có được cung cấp 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à cố gắng mở URL trong thẻ trình duyệt.

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

  • Bao gồ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ữ trực tiếp nội dung trên trang web của bạn nếu bạn được pháp luật cho phép làm vậy.
  • 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 nơi bạn phát hiện lỗi lúc 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 việc sử dụng thẻ không theo chuẩn

Cảnh giác với hành vi sử dụng thẻ không theo 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ì 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 phải khắc phục các vấn đề 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 hiển thị 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 các trang web nhỏ; nhưng đối với các trang web lớn hoặc các trang web có nhiều nhóm phát triển riêng, việc theo dõi tất cả nội dung được tải có thể rất khó khăn. Để giúp giải quyết tác 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 ngột các tài nguyên không an toà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 đư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 phải Content-Security-Policy-Report-Only) bằng cách sử dụng thẻ <meta> trong phần <head> trên 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 đó 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

Bất cứ khi nào 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 cho https://example.com/reportingEndpoint báo cáo có định dạng JSON về bất kỳ nội dung nào vi phạm chính sách bảo mật nội dung. Trong trường hợp này, bất cứ khi nào một tài nguyên phụ được tải qua HTTP, một báo cáo sẽ được gửi đ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 của 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 nhật ký 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 phải tự truy cập 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 trên một trình duyệt có thể hiểu 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ề các 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, có thể mất một khoảng thời gian trước khi bạn nhận được báo cáo cho toàn bộ trang web của mình.

Hướng dẫn 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.

Lựa chọn thay thế cho việc báo cáo bằng CSP

Nếu trang web của bạn do một nền tảng như Blogger lưu trữ, thì có thể bạn sẽ không có quyền sửa đổi tiêu đề và thêm CSP. Thay vào đó, một giải pháp thay thế khả thi có thể là sử dụng 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 kết hợp.

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

Hỗ trợ trình duyệt

  • 44
  • 17
  • 48
  • 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ể dùng các lệnh CSP để buộc tự động nâng cấp hoặc chặn những thành phần này.

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

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

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

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

Content-Security-Policy: upgrade-insecure-requests

Bạn cũng có thể nhúng 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">

Giống như việc nâng cấp tự động 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 cho trang của bạn. Lệnh upgrade-insecure-requests sẽ chi tiết hơn tính năng 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 làm được.

Lệnh upgrade-insecure-requests xếp chồng vào các tài liệu <iframe>, đảm bảo toàn bộ trang được bảo vệ.