特别是,我正在编写Django RESTful API来支持iOS应用程序,每当编写用于处理POST请求的方法时,我都会不断遇到Django的CSRF保护。
我的理解是,iOS管理的cookie不会被应用程序共享,这意味着我的会话cookie是安全的,并且没有其他应用程序可以使用它们。这是真的?如果是这样,我可以将我所有的API函数都标记为CSRF免除吗?
那不是CSRF的目的。CSRF是为了防止将数据直接发布到你的站点。换句话说,客户必须通过批准的路径进行实际发布,即查看表单页面,填写表单并提交数据。
API几乎排除了CSRF,因为它的整个目的通常是允许第三方实体访问和操纵你站点上的数据(CSRF中的“跨站点”)。因此,是的,我认为通常任何API视图都应免除CSRF。但是,你仍应遵循最佳做法,并保护通过某种形式的身份验证(例如OAuth)实际进行更改的每个API端点。