django - CSRF django nginx 与来自 cloudflare 的 ssl

标签 django ssl nginx csrf

背景

我正在尝试配置我的 Django 应用程序以使用 cloudflare 提供的 ssl。我的设置与 this answer 大致相同并遵循相同的解决方案。

问题:

这几个星期以来一直困扰着我(请帮忙!),因为我不是网络/安全人员,只需要一个避免我挖眼睛的解决方案出,但要保证网站安全。

我目前遇到一个 CSRF 问题,其中 https://www.domain.co.uk不匹配 https://domain.co.uk

配置

设置.py

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
USE_X_FORWARDED_HOST = True

nginx:

server {

    listen 80 default_server;

    server_name domain.co.uk www.domain.co.uk;
    access_log off;

    location /static/ {
        alias /static/;
    }


    location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';

            proxy_set_header X-Scheme $scheme;
            proxy_set_header X-Forwarded-Protocol $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            }
}

Cloudflare DNS:

A domain.co.uk  points to <ip> Automatic
CNAME www is an alias of domain.co.uk Automatic 

奖金

此外,我还有域的 .com,想知道如何最好地设置它,以便它也是 ssl。

最佳答案

您需要设置发送 CSRF cookie 的域。尝试设置 CSRF_COOKIE_DOMAIN".domain.co.uk"CSRF_COOKIE_SECURETrue在您的设置中。

相关文档https://docs.djangoproject.com/en/4.1/ref/csrf/#how-it-works

关于django - CSRF django nginx 与来自 cloudflare 的 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615826/

相关文章:

Django 亚马逊 s3 可疑操作

python - Django __unicode__ :\n and manytomany?

出站连接的 SSL 配置在 websphere-liberty 17.0.0.2 中不起作用

ssl - 忽略 Jmeter UI 记录中的 SSL 异常

java - 需要帮助将批处理转换为 Shell

nginx - Certbot :ImportError: No module named 'requests. packages.urllib3

nginx - nginx 根据子域请求路由不同的代理

使用自动索引时 Nginx 错误 404

django-mptt 值错误 : Cannot use None as a query value

python - 从 Django 1.4 到 Django 2.1.5 : custom field to_python() not called anymore