不要CSRF攻击适用于API的?不要CSRF攻击适用于API的?(Do CSRF attacks a

2019-05-14 11:54发布

特别是,我正在写一个Django的RESTful API来支持iOS应用程序,和我一直运行到Django的CSRF保护,每当我写的方法来处理POST请求。

我的理解是,通过iOS的管理Cookie不会被应用程序共享,这意味着我的会话cookie是安全的,并没有其他应用程序可以在他们渡过。 这是真的? 如果是的话,我能标记所有我的API函数作为CSRF豁免?

Answer 1:

这不是CSRF的目的。 CSRF是为了防止数据的直接张贴到您的网站。 换句话说,客户端必须真的发表了通过经认可的路径 ,即查看表单页面,填好,提交数据。

一个API几乎排除了CSRF,因为它的全部目的通常是为了第三方实体在您的网站(以下简称“跨站”在CSRF)访问和操作数据。 所以,是的,我觉得作为一个规则,任何API观点应该是CSRF豁免。 但是,你还是应该遵循最佳实践和保护每一个API端点,实际上使用某种形式的认证,如OAuth的变化。



Answer 2:

CSRF攻击依赖于Cookie隐含的所有请求特定的域发送。 如果您的API端点不允许基于Cookie的身份验证,应该是不错的。

即使你不使用基于Cookie的身份验证,您的cookie是安全的,因为iOS应用不共享的cookie 。 但是,除非你有意通过要求一个不寻常的user-agent头阻止Web浏览器,另一方可以建立一个使用你的API基于浏览器的应用程序,如果你的API支持基于cookie的身份验证的应用程序会很容易受到CSRF攻击并没有按“T适用CSRF保护。



Answer 3:

他们如果您还使用自己的API以支持网站申请。

在这种情况下,你仍然需要某种形式的CSRF保护,以防止在其他网站嵌入人的请求都有个驱动器通过身份验证的用户的帐户效果。

Chrome浏览器似乎否认默认跨域POST请求(其它浏览器可能不那么严格),但允许GET请求跨来源,所以你必须确保你的API中的任何GET请求没有副作用。



Answer 4:

这目前接受的答案(2012年5月),主要是正确的,但如果您使用的是基于会话的身份验证。 另外值得一提的CORS的作用。

简单的情况是,您访问foo.com和网站执行JavaScript建立一个基于AJAX-DELETE请求api.com/users/123并最终删除代表您的用户。 现在,这并不总是可能的,因为CORS的-浏览器会阻止foo.com从发出请求到api.com除非api.com明确白名单foo.com 。 这还假定您使用的是基于会话的认证您的API,而不是基于令牌的认证。 在基于会话的认证,谁登录到任何用户api.com ,而他们在保持登录可以执行的请求。如果你有基于令牌的认证(每个请求必须使用HTTP来制作Authorization包含身份验证令牌头),那么你是安全的。 基于会话的认证隐含通过cookie发送的身份验证令牌。

略差的情况是,如果你的信任CORS的领域之一被泄露 - 说你有不消毒的Javascript形式和用户管理通过形式注入JS到您的网站。 如果您使用的是基于会话的认证,那么认证的用户访问该页面将看到的Javascript运行做出API请求。 这可能,如果你使用的是基于会话的认证您的API是灾难性的,一个非常现实的可能性。



Answer 5:

据DRF文档, APIs是容易受到CSRF攻击,只要服务器使用认证会话(而不是要求每一次密码)

解决的办法是

  1. 确保“安全” HTTP操作,如GETHEADOPTIONS不能被用于改变任何服务器端状态。
  2. 确保所有“不安全”的HTTP操作,如POSTPUTPATCHDELETE ,总是需要一个有效的CSRF令牌。


文章来源: Do CSRF attacks apply to API's?