Панель предварительного просмотра администратора Wagtail admin не работает в рабочей среде

Предварительный просмотр страницы в Wagtail admin локально на моем сервере разработки работает нормально, но в рабочей среде предварительный просмотр не отображается, только вращающееся колесо. В консоли инструментов разработки Chrome я вижу сообщение об ошибке:

Uncaught SecurityError: Failed to read a named property 'scroll' from 'Window': Blocked a frame with origin "https://example.com" from accessing a cross-origin frame.

где я заменил свой реальный домен на "example.com".

В рабочей среде я использую Wagtail 6 с nginx и gunicorn, обслуживая мультимедийные и статические файлы с одного сервера.

Вот соответствующие части моей конфигурации nginx с некоторыми вычеркнутыми данными:

upstream app_server { 
    server unix:/opt/example-com/gunicorn.socket fail_timeout=0; 
} 
 
 
server { 
    listen          80; 
    server_name     example.com;
    rewrite ^/(.*)  https://example.com/$1 permanent; 
} 
 
server { 
    listen 443 ssl; 
    server_name example.com; 
     
    client_max_body_size 50M; 
 
    ssl_certificate         XXXX
    ssl_certificate_key     XXXX
      
    location /static/ { 
        alias /opt/example-com/static/; 
    } 
 
    location /media/ { 
        alias /opt/example-com/media/; 
    } 
 
    location / { 
        include proxy_params; 
        proxy_pass http://unix:/opt/example-com/gunicorn.socket; 
    } 
    location /admin/ { 
        include proxy_params; 
        proxy_pass http://unix:/opt/example-com/gunicorn.socket; 
    } 
}

В базовых настройках я установил

WAGTAILADMIN_BASE_URL = "https://example.com"

и на /admin/sites/ для имени хоста сайта задано значение "example.com".

Я не совсем понимаю, почему я вообще сталкиваюсь с этой проблемой межсайтового взаимодействия и как это исправить.

Я столкнулся с той же проблемой. Поскольку панель предварительного просмотра загружается внутри iframe, ее можно "решить", установив Параметры X-Frame.

Решение:

В вашем поле settings.py ИЛИ base.py добавьте следующее:
X_FRAME_OPTIONS = "SAMEORIGIN"

Ссылки:

https://docs.djangoproject.com/en/5.1/ref/clickjacking/

Соображения:

Осторожно!!. Это может снизить безопасность вашего сайта от атак с перехватом кликов.

Я был бы менее обеспокоен, если бы мы могли справиться с этим с помощью frame-ancestors вместо x_frame_options.

Также было бы здорово, если бы разработчики Wagtail добавили способ настройки этого с помощью декораторов django xframe.

Вернуться на верх