キーボードとマウスが動作しなくなりました + content-security-policyエラー

Discourse のセルフホストインスタンスを forum.embeetle.com で実行しています。数年間問題なく動作していました。

今朝、ブラウザでフォーラムに対するすべてのキーボードおよびマウス操作が機能しなくなったことに気づきました。フォーラムのどのページも読み込むことはできますが、スクロール、ログイン、検索などができません。

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;
}

サイトは、テーマを無効にしたセーフモードでは正常に動作するようです。

おっしゃる通りです。

デフォルトでテーマを設定した記憶はありませんが、設定して忘れてしまったのかもしれません。

テーマに何が問題なのかを突き止めている間、フォーラムが使えるように、デフォルトでテーマを一時的に無効にしたいのですが、どうすればよいでしょうか?テーマが無効になっている状態でしか管理ページにアクセスできない場合、どのようにすればよいでしょうか?セーフモードでは、すべてのテーマが無効になっており、有効にしてから再度無効にしても効果がないようです。

利用可能なテーマは3つあります(下記参照)。デフォルトで有効になっているものはありません。

また、セーフモードでは Content-Security-Policy のエラーは発生しません。

Safariでは、Discourse-spashプリローダーのインラインスクリプトである315行目の実行を拒否していると報告されています。テーマとは関係ありません。

すぐに修正するには、サイト設定でCSPを無効にすることができます。

Screenshot 2023-11-06 at 14.24.11

推測ですが、問題が解決しない場合は、サーバー環境が予期しないものを送信している可能性があります。または、別のスクリプトが干渉している(カスタムプラグインやその他のスクリプトを実行していますか?)

これは脆弱な状態になるため、できるだけ早く修正する必要があることに注意してください。しかし、少なくともフォーラムは再び機能するようになります。

はい、まさにそれが私にも起こっています。

現在、nginx設定(サーバーレベル)に次のような書き換えを追加することで、別の回避策を実装しました。

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

これにより、訪問者はデフォルトでセーフモードを使用するようになります。

この問題のさらなる調査を可能にするために、rewriteなしでフォーラムサーバーをhttps://raw.forum.embeetle.comに複製しました。そのURLにアクセスすると、元の問題が引き続き表示されます。

カスタムスクリプトは使用していません。いくつかのプラグインを使用していますが、それらを無効にしても効果があるかどうかを実験します。

使用中のプラグインは以下の通りです。

chat は既に無効になっていました。

discourse-mathfootnotespoiler-alert を無効にしてみましたが、問題は解決しません。

見つかりました:Discourse には厳しすぎる Content-Security-Policy ヘッダーを誤って発行していた nginx 設定の問題でした。

Content-Security-Policy を削除したところ、問題が解決しました。

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.