从iframe中执行javascript

时间:2009-06-05 20:05:30

标签: javascript iframe xss

我有:

  1. 网络服务器(服务器1)
  2. 运行遗留Web应用程序(服务器2)的野兽的应用程序服务器
  3. 服务器1上的iframe从服务器2拉入应用程序
  4. 我的问题是:

    遗留应用程序在其表单上使用JS验证。当用户尝试提交不完整的表单时,会弹出警报以通知用户他们是假人。当然,当app在iframe中运行时会失败,因为服务器1和服务器2位于不同的域中。

    我尝试在服务器1上设置以下代理指令:

    ProxyPass /legacy_app http://server2.url/legacy_app
    ProxyPassReverse /legacy_app http://server2.url/legacy_app
    

    我现在能够从http://server1.url/legacy_app提供iframe,但我仍然无法在iframe中执行javascript - 我得到的安全/访问错误与应用程序运行时的错误相同一个不同的领域。

    我还能尝试别的吗?

4 个答案:

答案 0 :(得分:1)

遗留应用程序如何检查框是否已填写?简单的JavaScript?阿贾克斯?

警告框本身仍应有效。我正在考虑用于确定是否应该发出警报的代码可能是坏了。

即使页面位于远程主机上,在我的本地apache服务器上运行以下代码仍会向我发出警告onLoad:

<html>
    <body>
    <div>
        <iframe src="http://www.crowderassoc.com/javascript/alertbox.html" width="300" height="200">
    </div>
    </body>
</html>

尝试将上述代码复制到服务器#1上的页面,看看您是否从iframe中的该远程站点获取了警告框。

答案 1 :(得分:0)

您是否尝试在托管在服务器#1上的.js文件中托管脚本但是用尽iframe(从服务器#2引用)?

我认为浏览器可以引用外部网站,但在外部网站引用时不喜欢它。

我自己没试过,但我相信这就是我听说过这种问题的解决方法。我知道这是Google Analytics使用的方法 - 您必须从Google的服务器请求.js文件,但一旦它存在,它就可以访问浏览器。

答案 2 :(得分:0)

乔,我认为你是对的。与其他服务器的快速测试表明,我可以非常轻松地从远程托管脚本触发警报。

遗留服务器是客户端,我们无法轻松访问它,但是看看他们的JS看起来他们正在进行某种跨站点/框架检测 - 值得进一步调查。

答案 3 :(得分:0)

我曾经遇到过这种情况,我试图在远程服务器上围绕一个大量编写脚本的预先存在的应用程序构建一个应用程序,如果它在自己的窗口中打开,应用程序运行正常,但是如果我试着将它加载到一个框架中,它会破坏。

我最终为这个项目做的是在一个宽度为495px的弹出窗口中打开本地应用程序,在主(已经存在的)窗口中加载外部应用程序,将主外部应用程序窗口的大小调整为屏幕宽度减去495像素,并将窗口并排放置在屏幕上。这给最终用户带来了与我试图用框架做的类似的效果,只有它起作用。

如果它有帮助,这是我在index.php文件中使用的代码:

// Manipulating the current window
window.location.href = 'http://www.someExternalApp.com'; // setting the page location.
window.name = 'legacyapp'; // setting the window name just the for heck of it.
moveTo(0,0); // moving it to the top left.

// Resizing the current window to what I want.
mainWindowWidth = screen.width - 495;
mainWindowHeight = screen.height; // Makes the window equal to the height of the users screen.
resizeTo(mainWindowWidth,mainWindowHeight); 

// function for opening pop-up
function openWin(){
    win2 = window.open(page,'',winoptions);
    win2.focus();
}

// internal app location (for use in pop-up)
page = 'someLocalApp.php';

// internal app Window Options (for pop-up)
winoptions = 'width=490,height='+mainWindowHeight+',top=0,left='+mainWindowWidth+'leftscrollbars=1,scrolling=1,scrollbars=1,resizable=1,toolbar=0,location=0,menubar=0,status=0,directories=0';

// Opens the local app pop-up
openWin();