2011-02-09 69 views
2

我创建了一个支持GET/POST/PUT/DELETE请求的RESTful API。现在我希望我的API有一个Javascript客户端库,并且我想用JSONP来绕过跨域策略。这有效,但当然只适用于GET请求。使用PUT/POST/DELETE跨域请求的JSONP问题

所以我开始思考如何实现这样的事情,并在同一时间试图使其无痛使用。

我想编辑我的API实现并检查每个HTTP请求。如果它是一个JSONP请求(它在查询字符串中有一个“回调”参数),我强制每个API方法都由GET请求执行,即使它应该被POST或DELETE等其他方法调用。

这不是一个RESTful方法来解决这个问题,但它有效。你怎么看?

也许另一种解决方案可能是动态生成一个IFrame发送非GET请求。有小费吗?

回答

1

有在这里一个非常类似的问题,一些相关的点...

JSONP Implications with true REST

跨域限制是有原因的;-)

JSONP可以让你暴露有限,安全的,只读的API跨域访问视图 - 如果你破坏了这一点,那么你可能会打开一个巨大的安全漏洞 - 恶意网站可以通过包含一个带有href指向的图像来对API进行破坏性调用API的右侧部分

让您的web应用程序公开通过iframe访问的某些功能,其中所有ajax都发生在web应用程序域的上下文中,这绝对是更安全的选择。即使那样,你仍然需要考虑CSRF。 (看看Django博客上的最新安全公告,就像本周发布的那样,所有对Django Web应用程序的JavaScript调用都必须经过默认的CSRF验证)

+0

Thx - 你知道任何资源开始IFrame hack? – Mark 2011-02-11 15:48:43