单个令牌是否可以防止 RESTful API 中的 csrf?

Does a single token protect against csrf in a RESTful API?

假设我正在创建一个 RESTful API(如 Twitter API)并且我只需要一个密钥令牌来访问端点 GET /messages

在RESTful API场景中,是否需要这一切来防止CSRF攻击?我的意思是,在 RESTful API 中,我没有使用 Cookies 来管理用户 session,因为这里的想法不是 session(无状态是其中之一REST 的原则)。

我是不是忘记了什么,或者这是正确的吗?我不明白为什么我需要 anti CSRF token 除了我的访问令牌。

提前致谢!

@Bart 首先,CSRF 攻击通常来自受信任的用户。这意味着客户端已经通过可能在休息时传递有效令牌成功地验证了自己 API。攻击可能是通过传递比方说 javascript 可以改变资源状态。所以只有一个密钥令牌并不能真正帮助避免 CSRF 攻击。

有关 CSRF 的更多参考,请参阅下面 URL:-

https://en.wikipedia.org/wiki/Cross-site_request_forgery

像 Spring 这样的大多数框架都内置了对 CSRF 的支持。

简短回答:如果您的 access_token 不是 cookie,是的,它足以保护您免受 CSRF。

长答案:

只有当 HTTP 客户端自动向服务器发送一些身份验证数据(通常是 cookie)时,才会发生 CSRF 攻击。关键是攻击者不需要知道 Cookie,如果网络用户使用同一浏览器访问 2 个站点(您的站点和攻击者的站点),它会自动发送。

为了反 CSRF,服务器向客户端发送一个私人令牌,浏览器不会自动将其发送给服务器(因此它不能是 cookie)。开发人员必须编写代码以将令牌附加到每个后续请求。

CSRF 是Web 浏览器使用Cookie 的问题,如果您正在开发restful API 不被Web 浏览器使用,通常您不需要关心CSRF