【问题标题】:django csrf for api that works with ios appsdjango csrf for api,适用于 ios 应用程序
【发布时间】:2013-04-28 14:07:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios django ios5 csrf


    【解决方案1】:

    对于您的 iOS 应用正在访问的那些 URL(“API 端点”),您需要在相应的视图函数上指定 @csrf_exempt 以禁用 csrf 保护。

    更多详情在这里 - https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt

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

    为了您的身份验证,您可以轻松参考 django rest framework 和 django tastepie 所做的事情。两者都使用 SessionAuthentication 类来处理身份验证并保护您的 iOS 应用可以连接到的公开 url(API 端点)。

    参考资料:-

    Django sweetpie 还有一个授权类,不要与身份验证混淆。它还有一个 APIKey 授权类,当您确实想将您的 django URL 公开给可能想要构建自己的应用程序以与您的 django URL 对话以访问数据的其他 3rd 方开发人员时,它会变得很有用(想想“facebook API”) .每个 3rd 方开发人员本质上都可以被提供一个唯一的 API,并且因为您拥有 APIKeyAuthorization 类和为每个 3rd 方应用程序提供的唯一 API Key,您可以确保只有“授权”应用程序可以使用您的 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 令牌)。

    一个名为“csrfmiddlewaretoken”的隐藏表单字段存在于所有 传出的 POST 表单。该字段的值为CSRF的值 饼干。

    这部分由模板标签完成。

    对于所有未使用 HTTP GET、HEAD、OPTIONS 的传入请求 或 TRACE,必须存在 CSRF cookie,并且“csrfmiddlewaretoken” 字段必须存在且正确。如果不是,用户将获得一个 403 错误。

    这项检查由 CsrfViewMiddleware 完成。

    另外,对于 HTTPS 请求,严格的 referer 检查是由 CsrfView 中间件。这是解决中间人问题所必需的 使用独立于会话时在 HTTPS 下可能发生的攻击 nonce,因为 HTTP 的“Set-Cookie”标头是 (不幸的是)被正在与网站交谈的客户接受 HTTPS。 (未对 HTTP 请求进行引用检查,因为 在 HTTP 下,Referer 标头的存在不够可靠。)

    这确保只有来自您网站的表单 可用于 POST 数据返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多