我们都熟悉页面上混合方案(http / https)内容的问题。
我正在一个不可避免的网站上工作。我不想阻止这一点。我知道有很多问题/答案。
我需要的只是检测这一点(通过 JavaScript?),这样我就可以调整页面行为(显示降级行为的通知或其他内容)。有什么帮助吗?
我们都熟悉页面上混合方案(http / https)内容的问题。
我正在一个不可避免的网站上工作。我不想阻止这一点。我知道有很多问题/答案。
我需要的只是检测这一点(通过 JavaScript?),这样我就可以调整页面行为(显示降级行为的通知或其他内容)。有什么帮助吗?
使用 jQuery,您可以使用以下代码找出页面上是否存在任何不安全的项目:
var flag = false;
if($("script[src^='http:']").length > 0
|| $("link[type='text/css'][href^='http:']").length > 0
|| $("img[src^='http:']").length > 0
|| $("iframe[src^=http:]").length > 0)
flag = true; // insecure content :(
else
// yay!
图片、JS、CSS 都是我能想到的不安全内容。也许还有更多,但您可以轻松地将它们添加到您发现的地方。
这很 hacky,但我设法在所有浏览器中仅使用 JavaScript 解决了这个问题。让我看看我能不能把它画出来。
我们有这个基本的加密页面:
<html>
<body>
<div> stuff </div>
<iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
</body>
</html>
什么时候URL_WHICH_IS_MAYBE_INSECURE
是https,一切都很好。但是当URL_WHICH_IS_MAYBE_INSECURE
是http时,IE不会加载内容,除非用户OK的不安全/混合内容。我想告诉用户该页面有点被破坏,直到他们点击允许。由于我无法进入的原因,我知道所有网站都是值得信赖的。只是其中一些不支持 SSL,而父站点需要。
AFAIK,我无法使用 JS 检测到此对话框/半加载状态。但是我能做的是在不安全的连接上运行 JS,如果他们允许的话(这也使 iframe 运行)。因此,只有当URL_WHICH_IS_MAYBE_INSECURE
http 和站点是 https(混合)时,我才添加两位代码 + HTML。
<html>
<body>
<div> stuff </div>
@if(needSpecialHandlingForMixedMode) {
<div id="secureWarn">
WARNING: This page has limited functionality, allow mixed content
</div>
}
<iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
</body>
@if (needSpecialHandlingForMixedMode)
{
string baseUrl = Request.Url.SchemeAndHostAndPort().Replace("https", "http");
<script src="@baseUrl/scripts/security-warning.js"></script>
}
</html>
脚本是
$(document).ready(function(e) {
$("#secureWarn").remove();
});
所以它是这样工作的。
希望这可以帮助某人。
干杯,迈克尔