由于跨源错误,无法在 Django CMS 中编辑任何内容

问题描述 投票:0回答:1

大约三个月前,我将旧的 Django 和 CMS 应用程序升级到(当时)最新的 LTS 版本(Django 为 4.2.3,django-cms 为 3.11.3)。升级后,当我在成功登录后尝试从 CMS 工具栏或 CMS 插件编辑任何内容时,出现以下错误:

SecurityError: Blocked a frame with origin "http://localhost:8000" from accessing a cross-origin frame.

经过简短的 Google 搜索,我能够通过在

CSRF_TRUSTED_ORIGINS
中设置
settings.py
(取决于环境)来解决该问题。

这就像一个魅力,直到几周前,突然又出现了同样的错误。尽管自 2023 年 7 月初以来没有部署任何新内容,但这种情况发生在我们的所有环境中(包括本地环境)。

首先,我尝试了本指南中的所有内容:https://noumenal.es/notes/til/django/csrf-trusted-origins/

我们的登台和生产 django 应用程序位于代理后面,因此我验证了

HttpRequest.is_secure()
返回
True
并且
X-Forwarded-Proto
标头在生产环境中设置为
https
。但这种情况也会发生在我的本地计算机上,那里没有 HTTPS。我还验证了请求中的 CSRF cookie 值和 CSRF 令牌参数实际上是相同的。

然后我尝试安装

django-cors-headers
模块并设置
CORS_ALLOWED_ORIGINS
,但没有成功。

对于本地开发,我有以下设置:

ALLOWED_HOSTS = ['localhost']
CSRF_TRUSTED_ORIGINS = ['http://localhost:8000']
CORS_ALLOWED_ORIGINS = ['http://localhost:8000']

日志根本没有提及此事。

除了

CSRF_TRUSTED_ORIGINS
配置错误之外,是否还有其他原因导致此消息突然出现?

django csrf django-cms same-origin-policy django-csrf
1个回答
0
投票

根据您升级的版本,您可能错过了升级说明中的一些内容,3.7.2 中的新增功能

Django 3.0 将 XFrameOptionsMiddleware 的默认行为从

SAMEORIGIN
更改为
DENY
。为了让 django CMS 正常工作,需要将
X_FRAME_OPTIONS
中的
SAMEORIGIN
设置为
settings.py

X_FRAME_OPTIONS = 'SAMEORIGIN'

此选项在 CMS 内的每个页面上也可用,位于高级设置中。允许您覆盖设置文件中的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.