JSONP是否安全使用?

使用JSONP时是否有任何安全问题需要考虑?


更新 :JSONP是进行跨域请求的常见破解。 现代浏览器现在具有跨源资源共享,并且IE8 +具有类似的XDomainRequest。 请参阅http://enable-cors.org/了解更多信息。

JSONP只是一个脚本包含,允许您使用回调。 但是,您应该了解跨站请求伪造(CSRF)。

只要你控制脚本和服务器,JSONP不再比脚本包含的不安全。 除非您有将敏感数据返回给登录用户的JSONP服务。 恶意网站可以向服务发送请求(希望用户在您的网站上登录),并检索数据。 该服务可以检查请求的引用者,但可以使用Flash来欺骗引用者(感谢Chris Moschini)。

想象一下这个senario: - 用户登录到他的网上银行帐户。 将会话cookie存储在用户浏览器中。 这个网站有一个关于用户和他的账户的敏感信息的jsonp服务。 - 其他网站不会知道用户已登录,但他们可以做一个猜测并尝试访问jsonp服务。 由于用户有一个会话cookie,浏览器将得到一个响应,并且没有任何东西阻止网站做一个ajax post来将敏感数据保存在他们的服务器上。

2012年6月28日更新 :如果您想防范CSRF攻击,您应该通过安全专家深入阅读博客文章:http://erlend.oftedal.no/blog/?blogid=130


是的,你需要小心,但是当与可靠的服务一起使用时,它是相对安全的。

以下是JSONP的安全问题摘要,据我了解:

从消费者的角度来看:

  • 您必须相信提供商不会返回恶意JavaScript,而不是返回您指定的JSONP回调中包含的预期JSON。
  • 任何第三方JavaScript嵌入式附件(例如Google Analytics)也是如此。
  • 这与XSS攻击类似,它允许第三方在您的应用程序中执行任意JavaScript,但是,您必须首先通过首先提出请求来选择信任该第三方。
  • 从提供者的角度来看:

  • 即使客户的Cookie存在于您的控制网页的请求中,您也不能认为该消息是存在的。 检查Referer标头与授权URL的白名单,和/或不要依赖基于cookie的认证。
  • 类似于CSRF /混淆的副攻击。

  • 双方都有安全问题。 其中最严重的是包括JSONP在内的网站。

    如果您包含来自其他域(您无法控制)的域,则该域可以随时更改该脚本。 他们可以让JavaScript在你的网页上下文中做任何事情,你自己的JavaScript可以做。 如果您使用JSONP,则无法解决此问题。 您应该研究使用iframe的跨域通信,最好由EasyDXM优秀库完成。

    如果您提供处理JSONP的Web服务,则必须防止跨站点请求伪造(CSRF)。 这是您的web服务将敏感信息返回给登录用户的地方。 如果用户已经登录到您的网站,任何其他网站都可以生成对JSONP服务的GET请求,并且您的域的Cookie与请求一起提交 - 实质上是对登录用户进行身份验证 - 除了现在,远程域获得响应并能够读取敏感数据!

    防止CSRF的最佳方法是生成随机数(一个难以猜测的随机生成的数字)并将其存储在会话中。 将这个随机数输出到您的网页上的所有表单中,并将其包含在您网页上的所有JSONP请求中。 在服务器上,确保请求中存在nonce并且正确(无论是GET还是POST等)。其他域将无法猜测此随机数,因此无法获取敏感信息,尽管存在Cookie正在发送。

    最后,还有另一种安全问题:JSONP根本不支持浏览器中的用户身份验证,OAuth可以实现这种身份验证。 当然,您可以让服务器获得某种访问令牌(如使用OAuth)并使用它。 但是,如果您想完全在浏览器中进行身份验证,则必须使用iFrames进行跨域通信。 我认为这是OAuth 2.0如何做到的。 以下是您设置的方式:托管在您网站上的网页可以完全访问您的服务器。 有一个加载EasyDXM的JavaScript库,并使用它来为您的网站设置一个隐藏的iframe,并使用它进行交谈。

    链接地址: http://www.djcxy.com/p/8329.html

    上一篇: Is JSONP safe to use?

    下一篇: What is JSONP all about?