【问题标题】:How to verify if website has mixed content如何验证网站是否包含混合内容
【发布时间】:2017-09-20 12:57:53
【问题描述】:

我必须编写一个程序来检查网站是否包含混合内容。 但我不确定如何识别混合内容 混合内容有确切的定义吗?

我知道混合内容可以有以下几种:

<img src="$unsafeContent">

<script src="$unsafeContent">

<object data="$unsafeContent">  

<audio src="$unsafeContent">

<video src="$unsafeContent">

<form action="$unsafeContent">

<iframe src="$unsafeContent">

<embed src="$unsafeContent">

<source src="$unsafeContent">

<param value="$unsafeContent">

<a href="$unsafeContent">

但是 javascript 中的组合字符串呢?我不能轻易认出他们。 我是否也必须下载它们并检查它们的内容? 同样的问题也适用于 css 文件。 那么 iFrame 或锚点呢?我是否也必须检查它们的页面,还是只检查目的地的 url?

【问题讨论】:

    标签: javascript html css ssl mixed-content


    【解决方案1】:

    混合内容的定义

    当初始 HTML 通过安全的 HTTPS 连接加载,但其他资源(如图像、视频、样式表、脚本)通过不安全的 HTTP 连接加载时,就会出现混合内容。这称为混合内容,因为加载 HTTP 和 HTTPS 内容以显示同一页面,并且初始请求通过 HTTPS 是安全的。

    混合内容会降低 HTTPS 网站的安全性和用户体验。

    来源:https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?hl=en-us

    如何检测混合内容

    现代浏览器会显示有关此类内容的警告,以向用户表明此页面包含不安全的资源。所以这意味着它可能是验证您的检测程序是否正常工作的好方法。

    例如,在 Chrome DevTools (F12) 的“网络”选项卡上,您将看到状态为 (blocked:mixed-content) 的请求包含不安全的内容。

    检测混合内容基本上是检测不使用 HTTPS 协议加载的内容,因此检查您提到的标签非常容易,您只需运行正则表达式或 xpath 即可完成此操作。但困难的部分是检测动态加载的内容(即 XMLHttpRequest 调用)。因此,在这种情况下,您实际上必须等待页面上的 javascript 运行。像 Selenium Web Driver http://www.seleniumhq.org/projects/webdriver/ 这样的工具可以让您在任何 Java、C#、Ruby、Python、Javsascript 语言中进行浏览器自动化。

    正如Detect broken SSL or insecure content warning with Selenium, BrowserStack, & Node.js 建议的那样,一个仅检查 Firefox WebDriver 日志的非常简单的脚本是一个简单的解决方案。

    【讨论】:

    • 还请注意,拥有多个浏览器选项总是好的,而不仅仅是 chrome。那会更通用。这就是我建议使用 Selenium Web Driver 的原因。具体来说,我已经测试了WebDriverIO,并且找到了最简单的入门方法。只需要提一下,您必须确保使用正确版本的 WebDriverIO、Selenium WebDriver 和 Browsers 版本才能使它们之间的通信正常工作。
    【解决方案2】:

    您应该能够以无头模式(无图形)运行 Chromium 并启用一些调试以查看该端(实际上是浏览器)正在收集的所有 URL。

    获得 URL 列表后,将规则应用于安全与否。

    https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

    【讨论】:

    • 这并不是真的试图回答这个问题,是吗?
    【解决方案3】:

    感谢您的提示。现在我有一个很好的解决方案。 使用 npm 模块“chrome-remote-interface”。有了这个你可以 通过 Debugging-Api 从无头 Chrome 获取有关混合内容的信息,如下所述https://chromedevtools.github.io/devtools-protocol/tot/Security/

    还有一个Java https://github.com/webfolderio/cdp4j 的解决方案。 (如果您选择此解决方案,请不要忘记检查许可证)

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多