Security JSONP使用安全吗?

Security JSONP使用安全吗?,security,json,jsonp,Security,Json,Jsonp,使用JSONP时是否有任何安全问题需要考虑?更新:JSONP是一种常见的跨域请求攻击。现代浏览器现在有跨源资源共享,IE8+也有类似的XDomainRequest。有关更多信息,请参阅 JSONP只是一个允许您使用回调的脚本include。然而,你应该意识到 只要控制脚本和服务器,JSONP就不会比脚本包含更不安全。除非您有一个JSONP服务将敏感数据返回给登录用户。恶意站点可以向服务发送请求(希望用户登录到您的站点),并检索数据。该服务可以检查请求的推荐人,但也可以使用flash欺骗推荐人(感

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

更新:JSONP是一种常见的跨域请求攻击。现代浏览器现在有跨源资源共享,IE8+也有类似的XDomainRequest。有关更多信息,请参阅

JSONP只是一个允许您使用回调的脚本include。然而,你应该意识到

只要控制脚本和服务器,JSONP就不会比脚本包含更不安全。除非您有一个JSONP服务将敏感数据返回给登录用户。恶意站点可以向服务发送请求(希望用户登录到您的站点),并检索数据。该服务可以检查请求的推荐人,但也可以使用flash欺骗推荐人(感谢Chris Moschini)

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


2012年6月28日更新:如果你想防范CSRF攻击,你应该深入阅读安全专家的这篇博文:

是的,你需要小心,但当与可信服务正确使用时,它相对安全

据我所知,以下是JSONP安全问题的摘要:

从消费者的角度来看:

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

  • 即使请求中存在客户端的cookie,您也不能假设消费者是您控制下的网页。根据授权URL的白名单检查Referer头,和/或不依赖基于cookie的身份验证
  • 类似于CSRF/代理攻击

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

      如果您包含来自另一个域(您不控制)的脚本,该域可以随时更改脚本。他们可以让javascript在您的网页上下文中执行任何您自己的javascript可以执行的操作。如果使用JSONP,就没有办法解决这个问题。您应该使用iframe研究跨域通信,这最好由优秀的EasyDXM库完成

      如果您提供处理JSONP的Web服务,则必须防止跨站点请求伪造(CSRF)。这是您的Web服务向登录用户返回敏感信息的地方。如果用户已登录到您的站点,任何其他站点都可以向JSONP服务生成GET请求,并且您的域的cookie将随请求一起提交——本质上是验证登录用户——但现在,远程域将获得响应并能够读取敏感数据

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


      最后,还有另一种安全性问题:JSONP根本不支持浏览器中的用户身份验证,这是OAuth可以做到的。当然,您可以让服务器获得某种访问令牌(比如OAuth)并使用它。但是,如果希望完全在浏览器中进行身份验证,则必须使用iframe进行跨域通信。我认为OAuth2.0就是这样做的。以下是设置方法:站点上托管的页面可以完全访问服务器。有一个javascript库,它加载EasyDXM并使用它为您的站点设置一个隐藏的iframe,并使用它与它对话。

      JSONP绝对不安全,因为它只是以javascript的形式跨域运行它得到的任何东西

      解决方案!解决方案

      创建一个iframe,最好是一个沙盒,并在那里加载JSONP。捕获结果并通过
      window.postMessage向上传递

      是的,像往常一样,有人首先想到了这个主意:)

      这篇博文已经不在了,但我保留了这里的链接,以供参考:
      编辑:


      它使用window.name hack进行iframe通信,但这是针对IE6和IE7的。

      该网站确实是一个安全的网站。我只想知道我的服务器存储的cookie是否存在任何安全问题。naugtur下面的链接提供了一个很好的解决方案,并对它如何被破坏以及解决方案如何工作进行了深入的解释。请看一看。解决问题的相关问题:提交的任何数据都会在GET请求中显示为查询参数,因此可能会被记录,这是一个问题吗?其他地方已经指出,HTTP\U REFERER可能会被Flash欺骗,因此,服务器通过jsonp提供的任何敏感数据都是易受攻击的。这只是风险的一方面。naugtur的链接显示了风险的另一面,并为该部分提供了更好的解决方案。