Die Django CSRF-Verifizierung ist nach dem Einrichten von SSL mit Certbot fehlgeschlagen

Die Django CSRF-Verifizierung ist nach dem Einrichten von SSL mit Certbot fehlgeschlagen

Ich arbeite derzeit an einem Django-Projekt, das Docker verwendet, und habe kürzlich ein SSL-Zertifikat mit einer containerisierten Version vonCertbotum meine Django-App über HTTPS zu sichern. Nachdem ich jedoch das SSL-Zertifikat implementiert und meine Nginx-Konfiguration aktualisiert hatte, trat bei mir der Fehler „CSRF-Verifizierung fehlgeschlagen“ auf, der vor der Einrichtung kein Problem war. Zuvor konnte ich mich bei meiner Django-App anmelden, wenn sie HTTP verwendete. Was könnte die Ursache dieses Problems sein?

Meine Django-Einstellung.

# settings.py
ALLOWED_HOSTS = ["*"]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "corsheaders.middleware.CorsMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

if DEBUG:
    CORS_ALLOW_ALL_ORIGINS = True
else:
    CORS_ORIGIN_ALLOW_ALL = False
    CORS_ORIGIN_WHITELIST = [
        'https://example.ph',
    ]

Meine vorherige Nginx-Konfiguration.

upstream api {
    server sinag_app:8000;
}

server {
    listen 80;

    location / {
        proxy_pass http://api;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /static/;
    }
}

Meine neue Nginx-Konfiguration mit SSL-Zertifikat.

upstream api {
    server sinag_app:8000;
}

server {
    listen 80;
    server_name ${DOMAIN};

    location /.well-known/acme-challenge/ {
        root /vol/www;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name ${DOMAIN};

    ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;

    include /etc/nginx/options-ssl-nginx.conf;

    ssl_dhparam /vol/proxy/ssl-dhparams.pem;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    client_max_body_size 4G;
    keepalive_timeout 5;

    location /static/ {
        alias /static/;
    }

    location / {
        proxy_pass http://api;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
    }
}

Antwort1

Ich bin kein SSL-Spezialist, habe SSL aber auf meiner Django-Website verwendet und ich denke, dass die Einstellung CSRF_COOKIE_SECURE erforderlich ist, um Ihre Formulare zu validieren, wenn SSL aktiviert ist, sofern Sie es nicht bereits eingerichtet haben.

Sehenhttps://docs.djangoproject.com/en/4.2/topics/security/#ssl-https

verwandte Informationen