无模板 Django + AJAX:Django 的 CSRF 令牌会在浏览会话过程中更新吗?

2024-04-19

我当前的设置是 AngularJS + Django 1.5,我完全放弃了 Django 模板引擎的使用(即后端几乎是一个 API 服务器)。

由于我没有使用csrf_tokentemplate 标签,Django 反过来,不会设置和发送csrftokencookie 响应。根据官方文档的指示,ensure_csrf_cookie()应该使用装饰器来强制装饰视图发送csrftoken曲奇饼。

我已经应用了ensure_csrf_cookie()视图的装饰器,它服务于我的 Web 客户端在引导时调用的第一个 GET 请求。这样,我的 Web 客户端就获得了 CSRF 令牌,从此可以向服务器调用不安全的方法(例如 POST)。

仅当 CSRF 令牌在浏览会话结束之前保持不变时,上述设置才能正常工作。

问题:Django 的 CSRF 令牌会在浏览会话过程中更新吗?如果“是”,这是否意味着我需要申请ensure_csrf_cookie()装饰师对我的所有意见?


1) Django 的 CSRF 令牌在浏览会话过程中是否会更新?

看起来像CSRF https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29令牌每个会话都是唯一的,但它基于我的观察,我没有“官方”来源。对于 Angular.js,我使用以下代码没有问题:

angular.module('app', ...)
  .config(function($httpProvider) {
    var cookies = document.cookie.split(';');
    var csrftoken = _.find(cookies, function(v) { 
                      return v.trim().indexOf('csrftoken=') == 0; 
                    });
    if(csrftoken) {
      $httpProvider.defaults.headers.common['X-CSRFToken'] = csrftoken.split('=')[1];
    }
  })

由于我从 Django 提供 HTML,因此当 Angular 引导时,cookie 已经存在。

2)如果“是”,这是否意味着我需要将ensure_csrf_cookie()装饰器应用于我拥有的所有视图?

你可以试试CORS http://www.w3.org/TR/cors/相反,如果CSRF https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29. Otto Yiu https://github.com/ottoyiu/维持django-cors-标题 https://github.com/ottoyiu/django-cors-headers/包,已知它可以与 REST 框架 API 一起正常工作。

一些(未经测试的)想法可以应用ensure_csrf_cookie():

  • 猴子补丁 APIView
  • 创建 CSRF Coo​​kie 组合并将其添加到您的视图中
  • apply ensure_csrf_cookie()到你的基类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无模板 Django + AJAX:Django 的 CSRF 令牌会在浏览会话过程中更新吗? 的相关文章

随机推荐