Trình kiểm tra nội dung hỗn hợp

HTML cần quét

Phát hiện tài nguyên http:// được tải trong một trang HTTPS.

Tiếp theo

Sau khi chuyển trang web sang giao thức HTTPS, các thẻ <img>, <script>, <link> hoặc <iframe> còn tồn tại và vẫn chỉ đến http://... sẽ làm mất biểu tượng khóa màu xanh lá; trong các trình duyệt hiện đại, chúng thường không tải hoàn toàn. Hãy nhập một địa chỉ URL – công cụ kiểm tra này sẽ tải trang, kiểm tra từng tài nguyên con (hình ảnh, bảng kiểu, script, font, iframe, video, âm thanh) và liệt kê tất cả các nội dung được truyền qua giao thức HTTP thông thường, giúp bạn khắc phục trước khi người dùng nhận thấy cảnh báo “không an toàn đầy đủ”.

Cách thức hoạt động của bộ quét

  1. 1

    Nhập địa chỉ URL

    URL HTTPS. Bộ quét thực hiện một bước chuyển hướng duy nhất.

  2. 2

    Trang đã được tải về.

    HTML được phân tích đối với từng tham chiếu đến tài nguyên con.

  3. 3

    Mỗi tài liệu tham khảo đều được phân loại.

    HTTPS, HTTP hoặc giao thức tương đối (`//cdn...`).

  4. 4

    Báo cáo được phân nhóm theo loại

    Nội dung chủ động so với nội dung thụ động, kèm theo thứ tự mức độ nghiêm trọng.

Nội dung hỗn hợp chủ động và thụ động

Các trình duyệt xử lý hai lớp này theo cách khác nhau:

  • Nội dung hỗn hợp chủ động (script, iframe, bảng kiểu, XHR/fetch, worker, WebSocket): bị trình duyệt hiện đại chặn hoàn toàn. Bao gồm: <script>, <link rel="stylesheet">, <iframe>, fetch(), XMLHttpRequest, importScripts().
  • Nội dung hỗn hợp thụ động (hình ảnh, video, poster âm thanh). Được tải nhưng bị đánh dấu: biểu tượng khóa biến mất và thanh URL hiển thị cảnh báo. Bao gồm: <img>, <audio>, <video> và mục tiêu action của biểu mẫu.

Vì sao điều này quan trọng

  • Tín nhiệm. Một chiếc khóa bị hỏng sẽ ngay lập tức cho thấy “trang web này không an toàn” đối với những người nhận thấy điều đó.
  • Tính năng: Nội dung hoạt động bị chặn sẽ khiến các script không chạy và các bảng kiểu không được áp dụng – dẫn đến trang web hiển thị bất thường.
  • SEO: Google ưa chuộng các trang sử dụng giao thức HTTPS; việc sử dụng HTTPS không ổn định sẽ ảnh hưởng gián tiếp đến thứ hạng của trang web.
  • Tính tuân thủ: PCI DSS và nhiều khuôn khổ tuân thủ khác yêu cầu sử dụng giao thức HTTPS mà không chứa nội dung hỗn hợp trên các trang giao dịch.

Các nguồn thông tin phổ biến

Nguồn Giải pháp điển hình
CDN truyền thống trên HTTP Chuyển sang CDN sử dụng HTTPS
Mã nhúng cũ của YouTube/Vimeo Cập nhật mã nhúng lên phiên bản hiện hành
URL các kịch bản mạng quảng cáo Sử dụng phiên bản HTTPS (đã có sẵn từ nhiều năm trước)
Phông chữ và bản đồ của bên thứ ba Thay đổi từ http://fonts.googleapis.com thành https://
Các widget nút xã hội Sử dụng mã widget hiện tại
URL hình ảnh do người dùng tạo Viết lại khi lưu; tải qua proxy khi hiển thị
Các URL được mã hóa cố định trong bài viết blog Tìm kiếm và thay thế theo nhóm trong cơ sở dữ liệu

Các chiến lược sửa lỗi

  1. URL tương đối với giao thức (//cdn.example.com/a.js): Tải dữ liệu theo giao thức của trang hiện tại. An toàn cho hầu hết các CDN nhưng đã bị loại bỏ; nên sử dụng rõ ràng https://... thay thế.
  2. Viết lại trong mã nguồn. Cập nhật các mẫu và nội dung để sử dụng https://; quét toàn bộ cơ sở mã bằng biểu thức chính quy http://(?!localhost).
  3. Cập nhật Chính sách bảo mật nội dung: Tệp Content-Security-Policy: upgrade-insecure-requests yêu cầu trình duyệt tự động chuyển đổi các địa chỉ URL của tài nguyên HTTP thành HTTPS một cách âm thầm, phù hợp nhất với các trang web không thể kiểm tra từng địa chỉ URL.
  4. Tương đương trực tiếp với <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">.
  5. Các tài nguyên chỉ hỗ trợ HTTP qua proxy sẽ được truyền qua nguồn dữ liệu HTTPS nếu thực sự không có điểm cuối hỗ trợ HTTPS ở phía thượng nguồn (tình trạng này khá hiếm ngày nay).

Những gì bộ kiểm tra phát hiện ra

  • Tất cả các URL bên ngoài được đề cập trong <img>, <script>, <link>, <iframe>, <video>, <audio><source>.
  • Thuộc tính action của biểu mẫu.
  • Các tham chiếu url(...) trong CSS inline nằm trong khối <style>.
  • Không thu thập các tài nguyên được chèn bằng JavaScript; những tài nguyên này được thêm vào lúc chạy chương trình và cần được kiểm tra từ phía trình duyệt (bảng Vấn đề trong Chrome DevTools có thể phát hiện chúng).

Câu hỏi thường gặp

Một phần. Tiêu đề upgrade-insecure-requests CSP hoặc thẻ meta yêu cầu trình duyệt tự động chuyển đổi các địa chỉ URL của các tài nguyên con trong HTTP thành HTTPS. Phương thức này hoạt động khi máy chủ hỗ trợ HTTPS; nếu nguồn dữ liệu đầu vào chỉ sử dụng HTTP thì việc chuyển đổi sẽ thất bại.

Không. Chỉ những tài nguyên được đề cập trong HTML tĩnh mới được hiển thị; các script tạo thành phần <img> khi chạy sẽ không xuất hiện. Bảng Sự cố của Chrome DevTools sẽ phát hiện những trường hợp này ngay trong trình duyệt.

Chúng hoạt động ổn định trên các trang sử dụng HTTPS với nội dung hỗn hợp (vì kế thừa tính năng của HTTPS). Tuy nhiên, chúng không hoạt động được trên các công cụ nội bộ chỉ hỗ trợ HTTP hoặc các trang đã lưu trữ; do đó, chúng đã bị loại bỏ. Nên sử dụng mã định nghĩa rõ ràng là https:// thay thế.

Bộ nhớ đệm trình duyệt. Hãy làm mới trang web bằng phím Ctrl+Shift+R hoặc thử nghiệm trong cửa sổ ẩn danh để xác nhận việc khắc phục đã thành công. Các báo cáo CSP và cảnh báo trên giao diện điều khiển sẽ hiển thị trạng thái hiện tại.

Bộ thu thập dữ liệu phía máy chủ sẽ truy xuất trang để phân tích. Bản thân địa chỉ URL không được lưu trữ ngoài yêu cầu.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác