解决跨站点脚本资源共享问题

时间:2012-04-03 13:51:40

标签: javascript xss

我想在iframe中加载外部网站。但由于Same-Origin-Same-domain策略而面临问题。因此,为了解决这个问题,我使用了代理解决方案,我们将请求发送到代理文件(我在java中编写),然后它请求服务器并返回响应。这工作得很好。

但是使用这种方法,所有页面都没有正确加载到我的iframe中。 目前我正在使用localhost。我面临的问题是在获取页面时有一些错误,如: - 在获取www.google.com时,我收到了以下错误: -

GET http://localhost:8080/images/srpr/logo1w.png 404 (Not Found)

a.html:101 GET http://localhost:8080/extern_js/f/CgJlbhICaW4gACswRTgALCswWjgALCswDjgALCswFzgALCswPDgALCswUTgALCswCjgAmgICaGUsKzCYATgALCswFjgALCswGTgBLCswQTgALCswTTgALCswTjgALCswVDgALCswaTgALCswkAE4ACwrMJIBOAAsKzDVATgALCsw2AE4ACwrMBg4ACwrMCY4ACyAAlCQAnA/Q4V9Cbp7fuo.js 404 (Not Found)

这些错误即将发生,因为我正在提取的网页中指定了相对路径(我猜)。我对吗?如果我是如何纠正这些事情,以便纠正这些错误。

在网上搜索后,我找到了一个完美的网站。请结帐http://optimizely.com

2 个答案:

答案 0 :(得分:1)

问题似乎是,如果站点使用相对HREF(相对于从中加载站点的路径/路径),那么您的解决方案将导致问题,因为您已将明显的加载域/路径更改为其他内容

一种可能性是将标签注入页面中的正确位置(在<head>部分中),以便正确设置基本href:

<base href="http://www.google.com">

有关详细信息,请参阅此文章:http://www.drostdesigns.com/base-href-tag/

此解决方案并非万无一失,因为如果网站已使用<base href="xxx">标记,则可能会导致问题,如果javascript代码正在根据加载的域/路径进行操作,则基本href将无法修复那。这些问题是否重要取决于具体页面。

如果基本href解决方案不起作用,您可能还必须代理所有其他资源请求(图像,ajax调用等...),以便所有发往其他主机但是请求的主机是适当代理。这将更加万无一失。

答案 1 :(得分:0)

我们无法用你到目前为止发布的描述来说明问题..但如果答案确实如你所暗示的那样,那么只需更正它 - 每当你得到一个相对链接时,通过在代理脚本中添加域名来使其成为完全合格的域名。