نحن نجرب سياسة أمان محتوى (CSP) جديدة تسمى ‘strict-dynamic’، والتي يجب أن تجعل من السهل جدًا دمج السمات والإضافات والبرامج النصية الخارجية مع Discourse بطريقة آمنة.
يمكنك تجربة الوضع الجديد عن طريق تمكين إعداد الموقع “سياسة أمان المحتوى صارمة وديناميكية”. يرجى إخبارنا إذا كان لديك أي ملاحظات!
نأمل أن نجعل هذا هو الوضع الافتراضي في المستقبل القريب، وسنقوم بإنشاء موضوع Announcements كلما اقتربنا من هذا الهدف.
لمزيد من المعلومات، انظر أدناه:
الخلفية
في عام 2018 قدمنا سياسة أمان محتوى افتراضية لـ Discourse. في ذلك الوقت، كانت سياسة دعم المتصفح لدينا تعني أننا كنا مقيدين باستخدام قيم ‘host-source’ (أي، سرد بادئات عناوين URL لكل برنامج نصي يجب السماح به).
هنا في عام 2024، تتوفر المزيد من الخيارات: وهي الكلمة المفتاحية 'strict-dynamic'. هذا يزيل الحاجة إلى سرد جميع عناوين URL للبرامج النصية مسبقًا. بدلاً من ذلك، يُسمح لأي برامج نصية موثوق بها مبدئيًا (عبر قيمة ‘hash’ أو ‘nonce’) بتحميل المزيد من البرامج النصية بأقل قيود.
كيف أجرب هذا الوضع الجديد؟
قم بتمكين إعداد “سياسة أمان المحتوى صارمة وديناميكية” في لوحة الإدارة الخاصة بك.
إذا لم تر الإعداد، فتأكد من أنك تستخدم أحدث إصدار من Discourse. تم دمج الميزة الجديدة في 16 فبراير (خلال دورة 3.3.0.beta1-dev).
إذا كنت تستخدم الاستضافة الخاصة بنا وترغب في تسريع التحديث، فقط أخبرنا!
ماذا يحدث عندما أقوم بتمكين الإعداد الجديد؟
سيتم تحديث توجيه script-src الخاص بـ Content-Security-Policy ليشمل قيمة nonce- واحدة، والكلمة المفتاحية 'strict-dynamic'.
سيتم تلقائيًا تعيين سمة nonce= المناسبة لجميع علامات \u003cscript\u003e الأولية في النواة وفي السمات. لا يلزم عمل إضافي من المسؤولين أو مطوري السمات.
ستحتاج الإضافات التي تقوم بحقن علامات \u003cscript\u003e المخصصة الخاصة بها إلى التحديث لدعم هذا الوضع الجديد (على سبيل المثال). نحن نعمل على جمع البيانات حول مدى انتشار هذا الأمر، وسنقدم إرشادات للمطورين إذا لزم الأمر.
سيتم تجاهل أي قيم host-source تساهم بها السمات أو الإضافات تلقائيًا (لا تدعم المتصفحات host-source جنبًا إلى جنب مع strict-dynamic).
ماذا عن البرامج النصية الخارجية مثل GTM، والتحليلات، والإعلانات، وما إلى ذلك؟
يجب أن تعمل ‘بشكل طبيعي’، دون الحاجة إلى تكوين إضافي. أخبرنا إذا واجهت أي مشاكل!
هل يمكن التراجع عنه؟
نعم! أثناء تشغيل التجربة، يمكنك تشغيل الإعداد وإيقافه وسيدخل التغيير حيز التنفيذ على الفور.
أمثلة على السياسات
مثال على سياسة Discourse قبل هذا التغيير:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src https://meta.discourse.org/logs/ https://meta.discourse.org/sidekiq/ https://meta.discourse.org/mini-profiler-resources/ https://d11a6trkgmumsb.cloudfront.net/assets/ https://meta.discourse.org/extra-locales/ https://d3bpeqsaub0i6y.cloudfront.net/highlight-js/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/ https://d3bpeqsaub0i6y.cloudfront.net/theme-javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/svg-sprite/ 'sha256-8uAKDaK4QxxCeYZl0Wxad2Nnj2tgKyA14hYBh66pnn0=' 'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=';
worker-src 'self' https://d11a6trkgmumsb.cloudfront.net/assets/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/;
frame-ancestors 'self';
manifest-src 'self';
مثال على سياسة Discourse بعد هذا التغيير:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src 'nonce-78uQrKOCg78iGuMAwCq2lI9E7' 'strict-dynamic';
frame-ancestors 'self';
manifest-src 'self';