使用 cookie 进行身份验证和随机数的 SSL 处理的 JSON API 通常是否安全?



如果我构建一个SSL'ed API,它使用cookie中保存的会话ID进行身份验证,添加随机数作为查询参数,并始终使用JSON"对象"响应(而不是带有回调的JSONP样式响应(,它总体上是否安全,特别是针对XSRF?

使用这种 API 的目的是仅将其提供给我自己域上的页面,并且可以通过此 API 自由公开私有数据(例如用户名和电子邮件((但不能被其他域使用(——并为团队中的开发人员保留合理的简单性。

让我至少分享一下我对这种方法的理解,以及为什么我认为它是安全的。如果错了,启发我!

  • 第三方域上放置到我们网站的<script>标签会发送我的cookie,但无法解析JSON对象响应(并且响应始终故意是顶级的JSON对象(。 此外,我需要确保影响服务器上状态的 API 调用都受到非 GET 方法访问的保护,因为<script>标签必须使用 GET,因此不会因尝试调用状态更改调用而造成严重破坏(换句话说,就 HTTP 方法而言,API 将遵循 REST(。另外,我故意不支持JSONP,因为它将是一个安全漏洞。
  • 用于劫持 cookie(会话(的中间人不是问题,因为我使用的是带有有效证书的 SSL。
  • 重放攻击是一个暂时有限的问题,因为使用随机数将限制在 HTTPS 请求的重放中发送的时间,因为服务器将确保 API 调用仅在少数时间内以典型的随机验证方式有效。
  • XMLHttpRequest 无法进行跨域调用,因此它无法从我的网站请求任何内容。
  • CORS(跨ORigin资源共享(不是问题,因为我没有跨域.xml文件或任何其他与HTML 5相关的跨域支持广告。
  • 第 3 方站点中的 iframe 并不重要,因为即使它可以以图形方式加载我的页面,主机站点也无法访问该 iframe 中的任何数据,并且因为我没有尝试支持跨域 iframe 通信(所以他们可以尝试在 iframe URL 上设置 #,就像人们所做的那样,以实现跨域 iframe 之间的通信, 但我的页面不会响应它(。

编辑:正如Russau所说,随机数甚至可以防止跨域GET请求(即<script>标签(。 具体考虑这一点时,我喜欢在本身不受随机数保护的"POST"API 调用中请求随机数的想法;应该是只有同一域上的XmlHTTPRequest才能生成随机数的情况。 这似乎是使 nonce 的生成对开发人员友好的一种简单方法。(即,网站/JavaScript开发人员没有服务器端 - 只需从您用于开发的同一API中请求您的nonce,并使用该nonce发出请求,直到您得到"糟糕的nonce"响应 - 然后要求一个新的,然后重复。

我能想象到的唯一攻击是DNS重新绑定。如果您的Web服务器配置正确(基于名称的虚拟主机应该足够(,那么您应该非常安全。

最新更新