再設計中の古いログインフォームのコードを見ています。これは、ユーザー名とパスワードの2つの入力フィールドを持つ単純なテーブルです。
しかし、終わりの直前に</table>
タグ次のような空白のiFrameがあります
<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">This is a security measure.</iframe>
これにより、どのようなセキュリティ対策が提供されますか?私は何も考えられないし、そもそもそれをそこに置いた人に尋ねることはできない。
コード内の説明が示すように、これはセキュリティ対策です。 iframe
は、 [〜#〜] xss [〜#〜] の悪用に対する保護メカニズムとして機能し、 同じドメインで公開されていないフレームとiframeへのJavaScriptアクセスを防ぐことにより、これらの非常に同じ攻撃タイプに対するブラウザ自身の対策 。 HTMLのこの部分を直接ドキュメントに記述する必要はありません。後者のコンテンツを操作しているのと同じJavaScriptで記述することもできますが、このソリューションの開発者は、将来の開発者にそれを明確にしたいと考えていました。一部の外部スクリプトは、投稿される前にログインフォームを検証し、ブラウザーのXSS防止メカニズムを使用して、サインイン時にエンドユーザーのセキュリティを向上させます。これは、iframeのIDがないことからも強く示唆されており、iframeを簡単に参照できるようになります。
次に、開発者はJavaScript script
要素をiframe
DOMに次のようなコードで添付します。
window.onload = function () {
var iframe = document.createElement('iframe');
iframe.width = "0px";
iframe.height = "0px";
iframe.style.visibility = "hidden";
iframe.id = "noXSSframe";
iframe.setAttribute("src", "about:blank");
document.getElementById("formID").appendChild(iframe);
iframe.addEventListener('load', function (e) {
var myElement = document.createElement('script');
myElement.setAttribute('src', '/content/test.js');
myElement.setAttribute('type', 'text/javascript');
iframe.contentDocument.body.appendChild(myElement);
}, false);
}
これは単なる例であり、開発者が選択した方法と必ずしも同じではありませんが、デモンストレーションの目的には十分役立ちます。
Iframeに追加されたばかりのこの外部JavaScriptファイルは、iframeを介して実行されるように記述され、同じドメインにあるスクリプトのみが許可されるように親ドキュメントオブジェクトを参照しますが、すべてのXSS呼び出されたスクリプトを親ドキュメントドメインの外部でホストされているスクリプトに置き換えるインジェクションは、ブラウザ自体によるアクセスを明らかに拒否されます。ブラウザが XMLHttpRequests に対して 同じOriginポリシー を強制しないようにする唯一の方法は、サーバーのHTTP応答に追加のヘッダーを添付し、明示的に クロスオリジンリソースシェアリング(CORS) を許可する。ただし、これはXSSインジェクションだけで改ざんできるものではありません。
つまり、ログインフォームの操作、確認、最終的な投稿(HTTPリクエストの準備と開始)を行うJavaScriptが、ログインフォームと同じドメインでホストされているファイルから確実に読み込まれるようにするエレガントな方法です。オンで、単純なXSSインジェクションを効果的に防止します。同時に、フィッシングサイトがこのログインフォームを再利用して別のドメインにログインリクエストを送信することも防ぎます。iframeスクリプトが追加の検証を行い、サーバー側で検証できる一意の応答値をフォームの [〜#〜] post [〜#〜] リクエスト。