【发布时间】:2012-06-05 22:26:39
【问题描述】:
是否可以仅在 HTML / JS 中为 REST API 创建客户端并防止 CSRF?
【问题讨论】:
标签: javascript api rest client csrf
是否可以仅在 HTML / JS 中为 REST API 创建客户端并防止 CSRF?
【问题讨论】:
标签: javascript api rest client csrf
有可能。
CSRF 预防通常针对简单的网站,而不是 API,因为 API 通常旨在被其他网站访问。隐藏的碎屑和令牌是防止此类攻击的最常用方法,但在可消耗的 API 上无法正常工作。
您可能需要一个良好的主要身份验证机制。易受 CSRF 影响的 Web 应用程序的主要弱点之一是 cookie。如果您的 API 不需要它们,则使用另一种身份验证机制(如 OAuth 或 HTTP Digest)可能是答案,因此外部用户仍然可以安全地使用 API(没有讨厌的碎屑验证)。
HTTP Auth Basic 和 OAuth 2.0 在 JS 客户端应用下都是可行的。这里有一个 OAuth2 的演示:https://gist.github.com/563893
Twitter 在主网站内使用自己的公共 API,因此有证据表明这样的事情是可能的,尽管我不确定它们如何具体防止外部 CSRF。每个请求都由接收器(位于此处:https://api.twitter.com/receiver.html)发出,并且授权令牌通过 cookie 进行隧道传输。您可能需要进一步研究它们的实现。
【讨论】: