DJango Post csrf_token无效并且找不到/favicon.ico

yzxexxkh  于 2022-12-05  发布在  Go
关注(0)|答案(2)|浏览(186)

我在DJango中遇到了问题。我正在尝试将数据发送到DJango中的SQL数据库。所以我需要我的令牌,我通过{{ csrf_token }}获得了令牌。但是当我在HTML网站上发送数据时,它告诉我POST 403被禁止,并且DJango终端显示NotFound:/favicon.ico以及Forbidden(来自POST的CSRF标记的长度不正确。):/安装/
有没有人能解决这个问题?下面是我用来请求令牌的代码。
谢谢你!

let formData = new FormData();
    formData.append("name", name);
    formData.append("gewinde", gewinde);
    formData.append("laenge", laenge);
    formData.append("durchmesser", durchmesser);
    //formData.append("containerNR", containerNR);
    formData.append('csrfmiddlewaretoken', token);

    fetch('/ausgeben/',{
        method: 'POST',
        body: formData
    });
ctehm74n

ctehm74n1#

尝试在fetch头中发送csrftoken而不是在请求的主体中发送。免责声明我没有在fetch中使用过这个,但是在JQuery和$.ajax请求中是必要的。

fetch('/ausgeben/',{
    headers: {
      'X-CSRFToken': token
    },
    ...
pnwntuvh

pnwntuvh2#

TL;DR添加一个图标.ico
长版本:
搜索更多关于CSRF问题的主题,我找到了这一个。
我认为您正面临着CSRF和一些浏览器的一个老问题(但似乎仍然有效)。它通常与favicon.ico文件有关,但也可能发生在其他静态资源(如javacript sourcemap *.map文件)上。
访问页面后,浏览器会请求favicon. ico。如果该文件不存在并且该请求由框架处理,则可能会导致生成新的CSRF令牌,从而使表单上的令牌无效。
引用另一句话:
1.当用户登录到PHP页面时,会分配一个会话cookie。当用户访问登录页面时,CSRF令牌与会话相关联。

  1. Favicon请求将发送到PHP而不是静态资源。通常情况下,这没问题,因为PHP会看到cookie。
    1.但由于请求看起来像是针对静态资源,Varnish在将其传递回Apache/PHP之前剥离了cookie,这意味着PHP发布了一个新的会话来替换旧的会话。
    https://news.ycombinator.com/item?id=3590328

相关问题