是否可以仅在HTML / JS中为REST API创建客户端并阻止CSRF?
答案 0 :(得分:1)
这是可能的。
CSRF预防通常针对简单网站而非API,因为API通常旨在由其他网站访问。隐藏的面包屑和令牌是防止此类攻击的最常见方法,它们无法在耗材API上正常工作。
您可能需要的是一个良好的主要身份验证机制。易受CSRF攻击的Web应用程序的主要缺点之一是cookie。如果你的API不需要它们,那么使用其他身份验证机制(如OAuth或HTTP Digest)可能就是答案,因此外部用户仍然可以安全地使用API(没有令人讨厌的crumb验证)。
在JS客户端应用程序下,HTTP Auth Basic和OAuth 2.0都是可行的。这里有一个OAuth2演示:https://gist.github.com/563893
Twitter在主网站内部使用自己的公共API,因此可以证明这样的事情是可能的,尽管我不确定它们是如何具体阻止外部CSRF的。每个请求都由接收者(位于此处https://api.twitter.com/receiver.html)发出,授权令牌通过cookie进行隧道传输。你可能需要进一步研究它们的实现。