适用于与ios应用程序配合使用的api的django csrf

use*_*115 10 django csrf ios ios5

我正在构建一个与服务器通信以获取数据的ios应用程序.

如果它只是一个普通的应用程序,我可以通过表单发送csrf令牌(因为所有来自同一个域).但是,对于ios应用程序,我不认为我可以设置csrf令牌.

因此,当从ios应用程序向服务器发出请求时,我收到有关csrf的错误.那么,最新解决方案是什么?禁用此csrf功能或其他更好的方法?这是我的第一个ios应用程序,所以请告诉我一个更好的方法,所以我会遵循这个.

Cal*_*eng 12

对于iOS应用程序正在访问的URL("API端点"),您需要@csrf_exempt在相应的视图函数上指定禁用csrf保护.

更多细节 - https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt

并通过其他身份验证方法保护这些URL,例如会话身份验证.

为了您的身份验证,您可以轻松地参考django rest框架和django tastypie所做的事情.两者都使用SessionAuthentication类来处理身份验证并保护iOS应用程序可以连接的公开URL(API端点).

参考文献: -

Django tastypie也有一个授权类,不要与身份验证混淆.它还有一个APIKey授权类,当你想要将你的django URL暴露给其他第三方开发人员时,它们可能想要构建他们自己的应用程序来与你的django URL通信以访问数据(想想"facebook APIs") .每个第三方开发人员实质上都可以提供一个唯一的API,因为您拥有APIKeyAuthorization类和为每个第三方应用程序提供的唯一API密钥,您可以确保只有"授权"的应用程序才能使用您的django URL.这是"Google+"或"Facebook"等各种大平台如何运作的本质.

django的csrf如何工作的详细信息

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

CSRF保护基于以下内容:

CSRF cookie,设置为随机值(与会话无关的nonce,因为它被调用),其他站点无权访问.

此cookie由CsrfViewMiddleware设置.它是永久性的,但由于无法设置永不过期的cookie,因此每次响应时都会发送它,该响应调用了django.middleware.csrf.get_token()(内部用于检索CSRF令牌的函数) .

所有传出POST表单中都有一个名为"csrfmiddlewaretoken"的隐藏表单字段.该字段的值是CSRF cookie的值.

这部分由模板标签完成.

对于未使用HTTP GET,HEAD,OPTIONS或TRACE的所有传入请求,必须存在CSRF cookie,并且'csrfmiddlewaretoken'字段必须存在且正确.如果不是,则用户将收到403错误.

此检查由CsrfViewMiddleware完成.

此外,对于HTTPS请求,严格的引用检查由CsrfViewMiddleware完成.这对于解决在使用会话无关nonce时在HT​​TPS下可能发生的中间人攻击是必要的,因为HTTP'Set-Cookie'标头(不幸地)被正在与之交谈的客户端接受HTTPS下的网站.(对HTTP请求不进行引用检查,因为在HTTP下,Referer头的存在不够可靠.)

这可确保只有源自Web站点的表单才能用于POST数据.