키보드와 마우스가 작동하지 않음 + content-security-policy 오류

forum.embeetle.com에서 자체 호스팅된 Discourse 인스턴스를 운영하고 있습니다. 여러 해 동안 잘 운영되어 왔습니다.

오늘 아침에 브라우저에서 포럼과의 모든 키보드 및 마우스 상호작용이 멈춘 것을 발견했습니다. 포럼의 어떤 페이지든 로딩할 수는 있지만, 스크롤, 로그인, 검색 등이 불가능합니다.

Firefox와 Chromium 모두 시도해 보았지만 동일한 문제가 발생합니다.

Firefox 개발자 도구에서 다음과 같은 오류가 표시됩니다:

Content-Security-Policy: The page’s settings blocked the loading of a resource at inline (“script-src”). forum.embeetle.com:362:10

최근 업데이트를 수행하거나 새로운 플러그인을 설치한 적은 없습니다.

이를 디버깅하고 수정하는 방법에 대한 제안이 있을까요?

제가 아는 한, 표준 Docker 기반 설치 환경이지만 Nginx 리버스 프록시 뒤에 실행하고 있습니다. Nginx 설정은 아래와 같습니다(관련이 있는지 확실하지 않음):

server {
    server_name forum.embeetle.com;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/embeetle/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/embeetle/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    access_log /var/log/nginx/forum.embeetle.access.log;
    error_log /var/log/nginx/forum.embeetle.error.log;

    location / {
         proxy_pass http://unix:/srv/embeetle_forum/discourse/shared/standalone/nginx.http.sock:;
         proxy_set_header Host $http_host;
         proxy_http_version 1.1;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP $remote_addr;
        error_page 502 =502 /error/offline.html;
        proxy_intercept_errors on;
     }
 
     location /error/ {
         alias /srv/embeetle_forum/error/;
     }
}

server {
    server_name forum.embeetle.com;
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}

테마가 비활성화된 안전 모드에서는 웹사이트가 정상적으로 작동하는 것으로 보입니다.

맞습니다.

기본 테마를 설정한 기억이 없지만, 설정해 두고 잊어버린 것일 수도 있습니다.

테마에 문제가 무엇인지 파악하는 동안 포럼을 사용할 수 있도록, 기본적으로 테마를 임시로 비활성화하고 싶습니다. 테마를 비활성화한 상태에서만 관리자 페이지에 접근할 수 있는 상황에서 어떻게 하면 될까요? 안전 모드에서는 모든 테마가 이미 비활성화되어 있으며, 테마를 활성화했다가 다시 비활성화해도 효과가 없는 것 같습니다.

사용 가능한 테마는 세 가지입니다(아래 참조). 어느 것도 기본적으로 활성화되어 있지 않습니다.

또한, 안전 모드에서는 Content-Security-Policy 오류가 발생하지 않습니다.

이상하네요. 제 경우 Safari에서는 315번째 줄 실행을 거부한다고 보고합니다. 해당 줄은 Discourse-spash 프리로더의 인라인 스크립트입니다. 따라서 테마와 관련이 없습니다.

즉각적인 해결책으로 사이트 설정을 사용하여 CSP를 비활성화할 수 있습니다:
Screenshot 2023-11-06 at 14.24.11

추측해 보면, 그래도 문제가 지속된다면 서버 환경에서 의도치 않은 내용을 전송하고 있거나 다른 스크립트가 간섭하고 있을 수 있습니다. (커스텀 플러그인이나 기타 스크립트를 실행 중이신가요?)

이렇게 하면 취약한 상태가 되므로 최대한 빨리 조치해야 합니다. 하지만 적어도 포럼은 다시 작동하게 됩니다.

네, 저에게도 정확히 같은 일이 일어나고 있습니다.

현재 저는 nginx 설정(서버 레벨)에 다음과 같은 rewrite를 추가하는 다른 임시 해결책을 구현했습니다:

    rewrite ^(.*)$ $1?safe_mode=no_themes break;

이로 인해 방문자들은 기본적으로 안전 모드(safe mode)를 사용하게 됩니다.

이 문제를 더 깊이 조사하기 위해, rewrite가 적용되지 않은 포럼 서버의 복제본을 https://raw.forum.embeetle.com 에도 만들었습니다. 해당 URL을 방문하면 여전히 원래 문제가 발생하는 것을 볼 수 있습니다.

저는 사용자 정의 스크립트를 사용하지 않습니다. 몇 가지 플러그인은 사용 중이며, 그중 일부 플러그인을 비활성화했을 때 어떤 효과가 있는지 실험해 볼 예정입니다.

내가 사용하고 있는 플러그인 목록입니다:

chat은 이미 비활성화되어 있었습니다.

discourse-math, footnote, spoiler-alert를 비활성화해 보았지만 문제는 여전히 지속됩니다.

찾았습니다: 제 nginx 설정 문제였는데, 현재 Discourse에는 너무 엄격한 Content-Security-Policy 헤더가 우발적으로 출력되고 있었습니다.

Content-Security-Policy를 제거하니 문제가 해결되었습니다.