当前位置: 首页 > 知识库问答 >
问题:

CSRF令牌从Angular 4到Django

怀宇
2023-03-14

这是我昨天问的一个问题的后续问题:来自Django的Angular 4 CLI中的CSRF令牌

我有一个后端Django服务器和一个前端Angular应用程序。我正试图提交一个角度的Django后端与一个职位的形式。问题在于CSRF令牌。

这是Django视图:

#@csrf_exempt
def empty_form(request):
    if request.method=="POST":
        message = "Post"
    else:
        message = "Get"
    return JsonResponse({'message': message})

这是角度分量:

send_sample_form() {

  let d = new Date();
  d.setTime(d.getTime() + 1 * 24 * 60 * 60 * 1000);
  let expires:string = "expires=" + d.toUTCString();
  let cpath:string = '/';
  // this.cookieService.set('csrftoken', this.server_token, d, cpath, '127.0.0.1', false);
  this.cookieService.set('csrftoken', this.server_token);
  let my_headers = new HttpHeaders(
    {
      'X-CSRFToken': this.server_token
    }
  );
  this.http.post('http://127.0.0.1:8000/emptyform/',
        {'my_form': this.sample_form.value},
        {headers: this.server_token, withCredentials: true})
        .subscribe(
          (response) => {
            console.log(response);
          }
        );
}

当Angular和Django是单独的服务器(localhost:4200和127.0.0.1:8000)时,Angular代码不会获得CSRF令牌。当我在生产模式下运行它时,因此在127.0.0.1:8000处只有Django服务器,现在角度组件能够通过以下方式提取CSRF令牌:

ngOnInit() {
  this.http.get('http://127.0.0.1:8000/generate_token/', { observe: 'response' })
      .subscribe(
        (response) => {
          this.server_token = this.cookieService.get('csrftoken');
          console.log(this.server_token);
        });
}

但是我已经尝试了Cookie服务的set()方法的所有可能版本,仍然从Django那里得到了403。

这厨师服务。set('csrftoken',this.server_token,d,cpath,'127.0.0.1',false);或者这个。厨师服务。set('csrftoken',此.server\u令牌);

为了检查Django服务器,我使用Postman向Django服务器发送请求。get请求给我一个CSRF令牌。当我做POST请求时,我需要一个CSRF cookie和一个标题“X-CSRFToken”来返回状态200,或者我得到一个403。因此,Django服务器CSRF中间件似乎正在工作,因为当请求具有CSRF cookie和XCSRFToken头时,它会返回200。

我在想,如果请求具有来自角度前端的正确CSRF cookie,是否可以检入Django view函数。我使用“csrf_豁免”让帖子通过,并试图找到一种方法来提取csrf cookie并进行目视检查,但找不到一种方法。有没有办法在Django视图中提取CSRF cookie并将其打印出来?喜欢

打印(请求['csrftoken'])

整个代码都在我的GitHub上:https://github.com/shivkiyer/djangoangular

共有1个答案

易祯
2023-03-14

如此简单:print(request.COOKIES['csrftoken'])

 类似资料:
  • 在angular文档中,提到angular将在post请求的头中自动发送cookie的值。文档链接 但它没有为我发送标题。这是我的密码 Nodejs用于设置cookie的代码 我在app.module.ts中使用了http客户端 **以上代码仅用于调试目的。我没有set-csrf终结点。 但是当我发送帖子请求时,它不会发送任何标题。我不能调试。 我也在angular的github存储库中添加了这个

  • 问题内容: 我有使用mod_wsgi在apache服务器上运行的django,以及由apache(而不是django)直接提供服务的angularjs应用。我想对django服务器进行POST调用(运行rest_framework),但csrf令牌存在问题。 是否可以通过某种方式从服务器设置令牌而不将其作为模板的一部分放置(因为这些页面没有经过django)? 我希望能够通过GET请求以cooki

  • 本页描述了解释CSRF攻击的用例(16.1): https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html 但是,如果用户确实登录了银行的网站,那么邪恶的网站难道不可能发出GET请求以获取新的CSRF令牌,并在根本不需要用户的情况下撰写帖子吗? 答案必须是否定的,否则CSRF令牌将毫无用处,但我

  • 问题内容: 我有2个html页面。 父页面和子页面。子页面包含一个提交按钮,该按钮在父页面上运行代码以提交Ajax消息。 我使用$ .load()方法加载子页面,然后在单击按钮时运行$ .ajax .POST方法。此post方法仅将JSON字符串传递给Python代码。 当我在除IE以外的任何浏览器上执行此操作时,它工作正常。但是,当我在IE中运行此代码时。我收到有关CSRF令牌的Python /

  • 问题内容: 我在CSRF令牌方面遇到问题。当我提交表单时,正在生成一个新的表单,但是我想我正在生成两个不同的令牌,这有点困惑。还有一个名为的令牌,因此我在开发人员工具中看到了两个不同的cookie(XSRF- TOKEN和_csrf),发布后它们没有变化。 我想要做的是为每个帖子请求生成一个新令牌,并检查它是否有效。我知道为了安全起见应该这样做,但是我坚持了下来。 漫长的一天,我是Express和

  • 问题内容: 我正在尝试从CSRF保护应用程序(PHP和许多JS)。 我想使用令牌。 AJAX完成了许多操作,因此我必须在Javascript中传递令牌。如果我想为每个会话或每个页面加载生成1个令牌,这很简单- 我生成一个新令牌,将其放在DOM中的某个位置,然后使用Javascript查找并发送到处理端。 但是,如果我想为每个操作使用新令牌怎么办?我正在考虑进行ajax调用以重新生成令牌,然后将结果