Chr*_*att 48
这不是CSRF的目的.CSRF旨在防止将数据直接发布到您的站点.换句话说,客户端必须实际发布批准的路径,即查看表单页面,填写表单,提交数据.
一个API几乎排除了CSRF,因为它的全部目的通常是为了让第三方实体在您的网站(以下简称"跨站"在CSRF)访问和操作数据.所以,是的,我认为通常任何API视图都应该是CSRF豁免.但是,您仍应遵循最佳实践并保护实际通过某种形式的身份验证(例如OAuth)进行更改的每个API端点.
Nic*_*ack 46
CSRF攻击依赖于将cookie与所有请求一起隐式发送到特定域.如果您的API端点不允许基于cookie的身份验证,那么您应该很好.
即使您使用基于cookie的身份验证,您的cookie也是安全的,因为iOS应用程序不共享cookie.但是,除非您通过要求不寻常的用户代理标头故意阻止Web浏览器,否则另一方可以构建使用您的API的基于浏览器的应用程序,如果您的API支持基于cookie的身份验证,该应用程序将容易受到CSRF攻击不适用CSRF保护.
Jam*_*mes 16
如果您还使用API来支持网站,它们确实适用.
在这种情况下,您仍然需要某种形式的CSRF保护,以防止有人在其他站点中嵌入请求,以对经过身份验证的用户的帐户产生偷渡效果.
Chrome似乎默认拒绝跨源POST请求(其他浏览器可能不那么严格),但允许GET请求跨域,因此您必须确保API中的任何GET请求都没有副作用.
除了使用基于会话的身份验证之外,当前接受的答案(2012年5月)大多是正确的.还值得一提的是CORS的作用.
简单的场景是您访问foo.com并且网站执行Javascript以发出基于AJAX的DELETE请求api.com/users/123并最终代表您删除用户.现在,由于CORS,这并不总是可行的 - 除非明确列入白名单foo.com,api.com否则浏览器将阻止发出请求.这也假设您使用基于会话的身份验证API,而不是基于令牌的身份验证.在基于会话的身份验证中,登录的任何用户都可以在登录时执行请求.如果您具有基于令牌的身份验证(每个请求必须使用包含身份验证令牌的HTTP 头进行制作),那么您就是安全的.基于会话的身份验证通过cookie隐式发送身份验证令牌.api.comfoo.comapi.comAuthorization
稍微糟糕的情况是,如果您的一个受信任的CORS域遭到入侵 - 比如说您有一个不清理Javascript的表单,并且用户设法通过该表单将JS注入您的站点.如果您使用基于会话的身份验证,则访问该页面的经过身份验证的用户将看到Javascript运行并发出API请求.如果您对API使用基于会话的身份验证,这可能是灾难性的,并且非常可能.