跨域XHR/AJAX:一个可能的解决方案



我只是有一个想法,进行跨域AJAX调用,因为到目前为止,它们确实是一个需要处理的难题。这是一个解决方案,我还没有看到暴露在网络上的任何地方,所以它可能(可能是)有缺陷/危险的原因,我现在似乎看不到,所以我转向你告诉我这是合法的还是不:

今天,如果你拥有一个域名www.foo.com,你不能让XML Http请求说www.bar.com。但是,如果您对foo.com做了一个XHR,然后通过cURL请求(或套接字或其他什么?)向bar.com请求页面呢?

您通常设置您的xhr,无论是GET还是POST,但您将其发送到foo.com/remote-xhr.php,并添加一个包含最初预期url的"url"参数和包含参数的"params"参数。

remote-xhr.php解析"params",调用"url",并"echo"响应。

这绝对是一个权衡,因为:使用其他解决方案(脚本标记hack/JSONP)进行2次调用,而不是1次调用。你失去了你可能有任何身份验证,因为客户端没有请求页面,但服务器(你可以用唯一的id,盐,任何东西来解决它);但这样你就有了一个完全正常的XHR调用,可以在任何远程域工作!

我错过了什么

我想你已经想到了其中的一些,但以防万一

  1. 如果您没有对服务器端XHR传递进行任何类型的身份验证,那么您可能需要限制可以调用的url并解析参数,以发现任何异常的XSS机会。

  2. 延迟增加可能会给你的web服务器带来压力,因为它可能会使请求/响应线程等待cURL响应返回的时间更长(除非你正在做一些额外的异步架构)。缓存cURL响应可能是更可取的,但这取决于您可能遇到的POST'ed参数的多少变化,这可能不是一个选项。

我相信还有其他取决于你的应用程序,但我会继续说,我正在做这样的事情,但只是因为我支付了一个外部API,我不想直接暴露给我的AJAX应用程序…所以我对调用进行了大量的抽象,并将它们限制在一个外部URL上。

这没什么不对。我在AJAX请求中使用这个技巧。

这是可行的,但请记住,您允许您的服务器被客户端告知要下载哪些数据。根据你的实现,它可能是相当无害的,但如果它不安全,它可能很容易咬你的屁股(也许限制在非常特定的域?)。

例如,有人可能向你的处理程序发送多个请求,返回一个Linux ISO或其他非法的东西。

相关内容

  • 没有找到相关文章

最新更新