4

私たちは皆、ページ上の混合スキーム(http / https)コンテンツの問題に精通しています。

ここに画像の説明を入力してください

やむを得ないサイトで作業中です。これを防ぎたくない。それについてはたくさんの質問/回答があることを私は知っています。

必要なのは、これを(JavaScriptを介して)単に検出して、ページの動作を微調整できるようにすることです(動作の低下などの通知を表示します)。何か助けはありますか?

4

2 に答える 2

4

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 はすべて、私が考えることができる安全でないコンテンツです。もっとあるかもしれませんが、見つけたら簡単に追加できます。

于 2012-08-30T20:04:55.107 に答える
3

ハックですが、JavaScriptだけですべてのブラウザでこれを修正できました. スケッチできるかどうか見てみましょう。

この基本的な暗号化されたページがあります。

<html> 
   <body>
        <div> stuff </div>
        <iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
   </body>
</html>

URL_WHICH_IS_MAYBE_INSECUREhttps の場合は、すべて問題ありません。しかし、URL_WHICH_IS_MAYBE_INSECUREhttp の場合、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();
});

したがって、このように機能します。

  1. 混合モードの場合、ユーザーが許可した場合にのみ、iframe とスクリプトの両方が読み込まれます。これは IE ではデフォルトで許可されておらず、Chrome と FireFox ではデフォルトで許可されています。
  2. 何もしない場合 (たとえば、IE で許可しない場合)、警告 div が表示されたままになります。
  3. 彼らがそれをクリックすると、iframe が読み込まれ、スクリプトも実行されるようになりました (私のサーバーには安全ではないため)。これにより、ページから警告が削除されます。
  4. 幸せが始まる…

これが誰かに役立つことを願っています。

乾杯、マイケル

于 2012-08-30T23:09:38.267 に答える