تعطلت لوحة المفاتيح والفأرة + خطأ 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;
}

يبدو أن موقعك يعمل بشكل جيد في الوضع الآمن مع تعطيل السمات.

أنت على حق.

لا أتذكر أنني قمت بتعيين سمة بشكل افتراضي، ولكن ربما فعلت ذلك ونسيت.

أود تعطيل السمات مؤقتًا بشكل افتراضي، حتى يكون منتدانا قابلاً للاستخدام أثناء اكتشاف ما هو الخطأ في السمات. كيف يمكنني القيام بذلك، إذا كان بإمكاني الوصول فقط إلى صفحات المسؤول مع تعطيل السمات؟ في الوضع الآمن، تم تعطيل جميع السمات بالفعل، ويبدو أن تمكينها ثم تعطيلها مرة أخرى لا يؤثر.

هناك ثلاث سمات متاحة (انظر أدناه). لا توجد سمة ممكّنة افتراضيًا.

أيضًا، في الوضع الآمن لا يوجد خطأ Content-Security-Policy.

غريب، بالنسبة لي في سفاري، يبلغ عن رفضه تنفيذ السطر 315. وهو النص البرمجي المضمن لمُحمل البدء المسبق لـ Discourse. لذا فهو غير متعلق بالسِمة.

لإصلاح فوري، يمكنك تعطيل CSP باستخدام إعداد موقع:
Screenshot 2023-11-06 at 14.24.11

مجرد تخمين: إذا استمرت المشكلة بعد ذلك، فقد تكون بيئة الخادم لديك ترسل شيئًا غير متوقع. أو نص برمجي آخر يتداخل (هل تقوم بتشغيل أي إضافات مخصصة أو نصوص برمجية أخرى؟)

لاحظ أن هذا سيتركك في حالة ضعيفة ويجب معالجته في أسرع وقت ممكن. ولكن على الأقل يعمل منتدى الخاص بك مرة أخرى.

نعم، هذا بالضبط ما يحدث معي.

لقد طبقت حلاً بديلاً مختلفًا في الوقت الحالي، عن طريق إضافة إعادة كتابة في إعدادات nginx (على مستوى الخادم) على النحو التالي:

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

لذا سيستخدم الزوار الوضع الآمن افتراضيًا الآن.

للسماح بمزيد من الاستكشاف لهذه المشكلة، قمت أيضًا بنسخ خادم المنتدى بدون rewrite على https://raw.forum.embeetle.com. إذا قمت بزيارة هذا الرابط، فسترى المشكلة الأصلية.

أنا لا أستخدم أي نصوص برمجية مخصصة. أنا أستخدم بعض الإضافات، وسأجرب ما إذا كان تعطيل أي منها سيكون له أي تأثير.

هذه هي المكونات الإضافية التي أستخدمها:

تم تعطيل chat بالفعل.

حاولت تعطيل discourse-math و footnote و spoiler-alert؛ لا تزال المشكلة قائمة.

تم العثور عليه: لقد كانت بالفعل مشكلة في تكوين nginx الخاص بي والتي انبعثت الآن عن طريق الخطأ ترويسة Content-Security-Policy صارمة جدًا لـ Discourse.

أدى إزالة Content-Security-Policy إلى حل مشكلتي.

3 إعجابات

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