在 Django Rest Framework + Angular 应用程序中进行 CSRF 保护的推荐方法是什么?

马里乌斯·休拉姆

我一直在为 Django 和 Angular 之间的配置而苦苦挣扎,但我遗漏了一些东西。推荐的方法是什么?

Angular 有一些 XSRF 保护,但自 AngularJS 以来它发生了变化,我发现了很多过时的信息或手册。Django 使用一些默认值,但它们在 Angular 中表现不佳。

在 DRF 和 Angular 之间解决 CSRF 的包含电池的方法是什么?

马里乌斯·休拉姆

HTTP 指南中解释了 Angular 推荐的方法,但对于我们中的一些人来说,它有一些棘手的步骤。幸运的是,在最新版本的 Angular 中,您只需要进行很少的更改。一旦设置完成,所有默认/推荐的 CSRF 中间件都表现良好。有一些特定于 DRF 的信息以及对Django 官方文档的参考

目前对我有用的最小更改(Django 2.1、Angular 6 和最新版本的依赖项)如下

姜戈侧

首先,您需要设置 Django 以按照 Angular 的预期发送 cookie:

# settings.py
CSRF_USE_SESSIONS = False
CSRF_COOKIE_HTTPONLY = False  # this is the default, and should be kept this way
CSRF_COOKIE_NAME = 'XSRF-TOKEN'
CSRF_HEADER_NAME = 'HTTP_X_XSRF_TOKEN'

警告!请记住,cookie 名称区分大小写我在那里浪费了很多时间:(

请注意,CSRF cookie 应该可以通过 Javascript 访问,因此httpOnly不应将标志设置为True

在这里,我假设您已经拥有一个功能性身份验证系统并且正在使用django.contrib.sessions.middleware.SessionMiddlewaredjango.middleware.csrf.CsrfViewMiddleware(通常您会在 中的MIDDLEWARE变量中找到列出的那些模块settings.py)。

角边

然后,在 angular 一侧激活 CSRF:

# app.module.ts
import {HttpClientModule, HttpClientXsrfModule} from '@angular/common/http';

...

@NgModule({
  imports: [
    // ...
    HttpClientModule,
    HttpClientXsrfModule,
  ]
// ...

如果您不想更改 CSRF Header 和 Cookie 的 Django 默认名称,您可以改为在 Angular 端更改它们,方法是更改HttpClientXsrfModule,以下行:

HttpClientXsrfModule.withOptions({
  cookieName: 'csrftoken',
  headerName: 'X-CSRFTOKEN',
}),

我还没有完全测试过这个配置。请记住,在 Django 方面,您必须稍微更改CSRF_HEADER_NAME(至少:连字符到下划线和HTTP_前缀)。前面的示例应该匹配 的默认值HTTP_X_CSRFTOKEN默认的CSRF_COOKIE_NAMEDjango 设置是csrftoken(小写)。

如果自定义命名有问题,请检查 Angular 插入的实际标题(使用浏览器的开发人员工具),您可以通过调试 request.META

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在具有Angular前端的简单Django Rest Framework应用程序中会发生什么?

来自分类Dev

Django Rest Framework CSRF令牌失败

来自分类Dev

使用angular2 http请求和Django CSRF保护的正确方法是什么?

来自分类Dev

python Django REST Framework CSRF失败:未设置CSRF cookie?

来自分类Dev

为什么Django / Django REST Framework即使使用force-CSRF也无法深入验证CSRF令牌?

来自分类Dev

Django Rest Framework + Angular.js Web应用程序中的用户身份验证

来自分类Dev

使用Django Rest Framework时如何获取初始CSRF令牌

来自分类Dev

如何忽略发送到Django REST Framework的CSRF令牌?

来自分类Dev

Django Rest Framework,CSRF和Vue.js

来自分类Dev

Django REST Framework Forbidden CSRF cookie 未设置

来自分类Dev

Django Rest Framework / Angular JS Preflight选项

来自分类Dev

针对移动应用程序和Chrome扩展程序的Django CSRF保护

来自分类Dev

使用Django REST Framework进行批量插入的最佳设计模式是什么?

来自分类Dev

如何在Django-rest-framework的modelviewset中取消设置CSRF?

来自分类Dev

Django Rest Framework忽略带有httpie的缺少的CSRF令牌

来自分类Dev

如何在django-rest-framework的modelviewset中取消设置csrf?

来自分类Dev

在项目外目录应用程序中翻译字符串(例如django-rest-framework)

来自分类Dev

将django-rest-framework与常规HTTP应用程序结合

来自分类Dev

Django Rest Framework将登录的用户链接到应用程序模型

来自分类Dev

如何使用简单的 Python 应用程序使用 Django Rest Framework

来自分类Dev

ModuleNotFoundError 在我的 Django 应用程序中没有在 Heroku 上找到 rest_framework

来自分类Dev

Rest API中的CSRF保护

来自分类Dev

Play Framework 2.3 CSRF保护

来自分类Dev

Django + django-rest-framework-simplejwt保护视图

来自分类Dev

Django Rest Framework / Angular JS Preflight选项请求

来自分类Dev

为什么Django Rest Framework序列化程序的`create()`方法返回值?

来自分类Dev

JSON API标准的Django Rest Framework方法

来自分类Dev

Django Rest Framework Viewset的HTTP方法

来自分类Dev

Django Rest Framework Reverse()方法失败

Related 相关文章

  1. 1

    在具有Angular前端的简单Django Rest Framework应用程序中会发生什么?

  2. 2

    Django Rest Framework CSRF令牌失败

  3. 3

    使用angular2 http请求和Django CSRF保护的正确方法是什么?

  4. 4

    python Django REST Framework CSRF失败:未设置CSRF cookie?

  5. 5

    为什么Django / Django REST Framework即使使用force-CSRF也无法深入验证CSRF令牌?

  6. 6

    Django Rest Framework + Angular.js Web应用程序中的用户身份验证

  7. 7

    使用Django Rest Framework时如何获取初始CSRF令牌

  8. 8

    如何忽略发送到Django REST Framework的CSRF令牌?

  9. 9

    Django Rest Framework,CSRF和Vue.js

  10. 10

    Django REST Framework Forbidden CSRF cookie 未设置

  11. 11

    Django Rest Framework / Angular JS Preflight选项

  12. 12

    针对移动应用程序和Chrome扩展程序的Django CSRF保护

  13. 13

    使用Django REST Framework进行批量插入的最佳设计模式是什么?

  14. 14

    如何在Django-rest-framework的modelviewset中取消设置CSRF?

  15. 15

    Django Rest Framework忽略带有httpie的缺少的CSRF令牌

  16. 16

    如何在django-rest-framework的modelviewset中取消设置csrf?

  17. 17

    在项目外目录应用程序中翻译字符串(例如django-rest-framework)

  18. 18

    将django-rest-framework与常规HTTP应用程序结合

  19. 19

    Django Rest Framework将登录的用户链接到应用程序模型

  20. 20

    如何使用简单的 Python 应用程序使用 Django Rest Framework

  21. 21

    ModuleNotFoundError 在我的 Django 应用程序中没有在 Heroku 上找到 rest_framework

  22. 22

    Rest API中的CSRF保护

  23. 23

    Play Framework 2.3 CSRF保护

  24. 24

    Django + django-rest-framework-simplejwt保护视图

  25. 25

    Django Rest Framework / Angular JS Preflight选项请求

  26. 26

    为什么Django Rest Framework序列化程序的`create()`方法返回值?

  27. 27

    JSON API标准的Django Rest Framework方法

  28. 28

    Django Rest Framework Viewset的HTTP方法

  29. 29

    Django Rest Framework Reverse()方法失败

热门标签

归档