问题在于:
1。)我们在这里有页面... www.blah.com/mypage.html
2。)该页面请求像这样的js文件www.foo.com ......
<script type="text/javascript" src="http://www.foo.com/jsfile.js" />
3。)“jsfile.js”使用Prototype将Ajax请求发回www.foo.com。
4.。)ajax请求调用www.foo.com/blah.html。回调函数获取html响应并将其抛入div。
这似乎不起作用,我想这是XSS。这是对的吗?
如果是这样,我该如何解决这个问题?有没有其他方法可以在不使用iframe的情况下将我的html从www.foo.com上传到www.blah.com而不使用iframe?
答案 0 :(得分:14)
是XSS,禁止使用。你真的不应该那样做。
如果你真的需要,让你的AJAX代码调用blah.com上的本地代码(PHP,ASP,无论如何),使其行为像客户端一样,从foo.com获取你需要的任何东西并将其返回给客户端。如果您使用PHP,则可以使用fopen('www.foo.com/blah.html','r')执行此操作,然后将内容读取为常规文件。
当然,需要在php.ini中启用allow_remote_url_fopen(或其他任何名称)。
答案 1 :(得分:6)
允许网站指定允许对其进行跨站点查询的其他网站有w3c proposal。 (例如,维基百科可能希望允许所有文章请求,但谷歌邮件不希望允许请求 - 因为这可能允许任何网站在您登录谷歌邮件时打开以阅读您的邮件。)
这可能会在将来的某个时候出现。
答案 2 :(得分:3)
如上所述,JSONP解决了这个问题。但是,您请求数据的站点需要支持JSONP才能在客户端上使用。 (JSONP本质上是在页面中注入一个脚本标记,并提供一个应该用结果调用的回调函数)
如果您提出请求的网站不支持JSONP,则必须在您的服务器上代理该请求。如上所述,您可以在自己的服务器上执行此操作,或者我过去所做的事情是使用http://www.jsonpit.com,它将为您代理请求。
答案 3 :(得分:2)
一种选择是实现一个代理页面,该页面将所需的url作为参数。例如http://blah.com/proxy?uri=http://foo.com/actualRequest
答案 4 :(得分:1)
答案 5 :(得分:0)
上面显示的方法可能会成为一个很大的安全漏洞。 建议您根据白名单验证站点名称,并构建服务器端代理的实际URI。
答案 6 :(得分:0)
对于跨域命中,这是一个很好的工作示例,现在被视为“标准”http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html。
还有其他方法,例如注入带有document.domain的iframe改为
我仍然认为,简单的方法是在同一个域中调用代理,但它不是真正的客户端WS调用。