私たちは皆、ページ上の混合スキーム(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 はすべて、私が考えることができる安全でないコンテンツです。もっとあるかもしれませんが、見つけたら簡単に追加できます。
ハックですが、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 は、ユーザーが安全でない/混合コンテンツを許可しない限り、コンテンツをロードしません。許可をクリックするまで、ページがちょっと壊れていることをユーザーに伝えたいです。詳しい説明は省きますが、すべてのサイトが信頼できるものであることは知っています。それらの一部は SSL をサポートしておらず、親サイトは SSL をサポートする必要があります。
私の知る限り、JSでこのダイアログ/セミロード状態を検出できません。しかし、私ができることは、許可されている場合は安全でない接続で JS を実行することです (これにより、iframe も実行されます)。そのため、 http とサイトが https (混合) の場合にのみ、2 ビットのコードと HTML を追加します。URL_WHICH_IS_MAYBE_INSECURE
<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();
});
したがって、このように機能します。
これが誰かに役立つことを願っています。
乾杯、マイケル