【问题标题】:CSRF cookie not set Django cross-site iframe in chromeCSRF cookie 未在 chrome 中设置 Django 跨站点 iframe
【发布时间】:2020-12-08 06:50:53
【问题描述】:

我正在尝试在不同的域中使用我的 django 站点的 iframe,但是每当我提交表单时,它都会显示 CSRF cookie 未设置。这发生在 chrome 和 safari 中。我正在运行 Django 3.1.0。

我尝试在 settings.py 中添加以下设置:

SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SECURE = True
X_FRAME_OPTIONS = 'ALLOWALL'
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = None
CSRF_COOKIE_HTTPONLY = False
CSRF_TRUSTED_ORIGINS = [
    'otherdomain.com',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
]

此外,我可以使用以下格式确认 csrf 令牌:

{% csrf_token %}

最后,我还在表单页面中添加了 @xframe_options_exempt 装饰器。

编辑:我也在使用文档推荐的渲染方法来显示表单。

Edit2:对于更多上下文,此表单在主机域(不是 iframe)中使用时可以正常工作

不幸的是,csrf 豁免装饰器对我来说不是一个选项。我已经尝试清除我的 cookie,但它并没有解决我的问题。任何帮助将不胜感激!

【问题讨论】:

    标签: django iframe django-forms csrf django-csrf


    【解决方案1】:

    通过将 CSRF_COOKIE_SAMESITE 的值更改为“无”而不是“无”来解决此问题。显然 Chrome 要求它是一个明确的字符串,而不是一个空值

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2019-04-04
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2020-12-05
      • 2013-03-28
      相关资源
      最近更新 更多