موافقة الكوكيز، اللائحة العامة لحماية البيانات (GDPR)، وDiscourse

:books: هذا دليل توضيحي يشرح الجوانب التقنية لـ GDPR وموافقة ملفات تعريف الارتباط (Cookie Consent) وكيفية عملها داخل Discourse، بالإضافة إلى خيارات إدارة موافقة ملفات تعريف الارتباط وخدمات مدير المحتوى.

:warning: هذا المستند ليس دليلاً شاملاً لكل التفاصيل التي ينطوي عليها GDPR. لا تقصد شركة Discourse أن يُستخدم هذا الدليل كاستشارة قانونية لأي مستخدمين أو عملاء. ولا تستطيع شركة Discourse تحديد الامتثال القانوني لـ GDPR أو أي قوانين أخرى تتعلق بموافقة ملفات تعريف الارتباط لحالتك الفردية أو حالة الاستخدام الخاصة بك.

:spiral_notepad: تستخدم Discourse الآن سياسة أمان المحتوى (CSP) من نوع “Strict Dynamic”، لذا لم يعد من الضروري (أو الممكن) إضافة عناوين URL فردية إلى إعداد الموقع Content security policy script src. للحصول على تفاصيل إضافية، يرجى الاطلاع على Content-Security-Policy now uses 'strict-dynamic'.

ملفات تعريف الارتباط في Discourse

لفهم كيفية استخدام Discourse لملفات تعريف الارتباط، يرجى الاطلاع على قسم ملفات تعريف الارتباط في إشعار الخصوصية الخاص بنا.

ملفات تعريف الارتباط الأساسية

بشكل افتراضي، تقوم Discourse بتعيين ملفات تعريف الارتباط الضرورية فقط لوظائفها الأساسية، وهي تمكين المستخدمين من التواصل مع بعضهم البعض ومع العالم من خلال نشر المحتوى على الإنترنت.

ملفات تعريف الارتباط التابعة لجهات خارجية

بشكل افتراضي، لا تستخدم Discourse ملفات تعريف الارتباط لأغراض التحليلات، ولا تستخدم أي ملفات تعريف ارتباط عبر المواقع أو ملفات تتبع الإعلانات. ومع ذلك، يمكن لمسؤولي الموقع اختيار إضافة ملفات تعريف ارتباط أخرى إلى موقع Discourse الخاص بهم (مثل Google Analytics، وشبكات الإعلانات، وبيكسلات التتبع، وما إلى ذلك).

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

لافتات موافقة ملفات تعريف الارتباط

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

:loudspeaker: الإشارة إلى نص برمجي JS تابع لجهة خارجية على موقعك يمنح تلك الجهة الخارجية فعليًا وصولًا إداريًا كاملاً إلى الموقع، مما يشكل خطرًا أمنيًا محتملاً.

:warning: إذا كنت تخطط لاستخدام إحدى هذه الطرق لإدارة موافقة ملفات تعريف الارتباط، فستحتاج إلى تحديد ما إذا كانت تعمل بطريقة تناسب احتياجاتك والمتطلبات القانونية لموقعك.

Osano

انتقل إلى https://www.osano.com/plans، واختر خطة وأنشئ حسابًا.

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

سيتم نقلك إلى لوحة تحكم Osano. انقر على “إدارة الموافقة” (Consent Management)، وأضف إعداد موافقة جديد.

أدخل اسمًا للمدير، وعنوان URL للموقع الذي ترغب في تتبعه، وعنوان URL لسياسة ملفات تعريف الارتباط الخاصة بموقعك. بشكل افتراضي، يمكن العثور على سياسة ملفات تعريف الارتباط الخاصة بـ Discourse في صفحة الخصوصية عند https://<your-site>/privacy.

بعد النقر على إنشاء الإعداد (Create configuration)، ستظهر نافذة منبثقة تعرض كود اللافتة. يمكنك إضافته الآن إلى Discourse أو الانتظار لاحقًا. لن يتم عرض اللافتة للمستخدمين حتى تنشرها من لوحة تحكم Osano.

يمكنك إضافة النص البرمجي إلى Discourse من خلال مكون سمة أو عن طريق تعديل سمعتك مباشرة.

لإضافة اللافتة إلى Discourse، انتقل إلى لوحة تحكم المسؤول، ثم تخصيص → سمات → مكونات، وانقر على “تثبيت” (Install).

انقر على “إضافة CSS/HTML” وأضف الكود إلى قسم الرأس (Head).

إذا تم إضافة الكود بنجاح إلى منتداك، فسترى أن حالة مديرك تقول الآن Live ولكن النص البرمجي الخاص بك غير نشط بعد. يكون المدير أيضًا في وضع اكتشاف/استماع (Mode Discovery/Listener)، وهذا جيد في الوقت الحالي. بينما يكون المدير في هذا الوضع، لن يتم عرض اللافتة في موقعك.

عد إلى لوحة تحكم Osano. في الأقسام التالية، يمكنك تخصيص جوانب لافتة الموافقة الخاصة بك. بالنقر على الخريطة، يمكنك رؤية كيفية عرض اللافتة في دول مختلفة.

يقوم Osano تلقائيًا باكتشاف الدولة التي يزور منها المستخدم الموقع، ويقوم بتعديل طريقة عرض اللافتة بناءً على قوانين الخصوصية الإقليمية.

على سبيل المثال، عند الاتصال من فنزويلا، تكون لافتة ملفات تعريف الارتباط بسيطة وتختفي تلقائيًا بعد فترة زمنية معينة:

أما من هولندا، وهي دولة في الاتحاد الأوروبي، فإن اللافتة تحتوي على خيارات أكثر.

هناك أيضًا خيار لإضافة أداة ملفات تعريف ارتباط (cookie widget) تعرض تفاصيل أكثر حول ملفات تعريف الارتباط.

بعد الانتهاء من التخصيصات، انقر على حفظ التغييرات (Save changes)، ثم نشر (Publish)، وأخيرًا مسح ونشر (Clear & Publish).

انتقل إلى قسم السكريبتات (Scripts) وقم بتصنيف أي نص برمجي يتم اكتشافه على موقعك. على سبيل المثال، في موقع Discourse الخاص بي، تم اكتشاف عناوين URL الخاصة بشبكة توصيل المحتوى (CDN) فقط، والتي تُصنف على أنها أساسية (Essential). أي خدمة تابعة لجهة خارجية أخرى قد تعمل على موقعك، يجب تصنيفها وفقًا لذلك.

ينطبق الشيء نفسه على أي ملف تعريف ارتباط يتم اكتشافه. على سبيل المثال، إذا كان لديك Google Analytics على موقعك، فسيقوم باكتشاف ملفات تعريف الارتباط _ga، والتي يجب تصنيفها على أنها تحليلات (Analytics).

قد يستغرق Osano بعض الوقت لاكتشاف ملفات تعريف الارتباط والسكريبتات التي تعمل على موقعك، وقد تحتاج أيضًا إلى التنقل عبر الأقسام المختلفة في منتداك للتأكد من تشغيل مقتطف Osano في كل مكان.

قد تتغير ملفات تعريف الارتباط والسكريبتات المكتشفة بمرور الوقت، وستستلم إشعارًا عبر البريد الإلكتروني من Osano يطلب منك تحديث تصنيفك على النحو التالي: إعداد 'اختبار ملفات تعريف الارتباط' يشغل سكريبتات وإطارات و/أو ملفات تعريف ارتباط غير مصنفة.

بمجرد جاهزية التصنيف، غيّر الوضع إلى “تسامح” (Permissive) (موصى به) أو “صارم” (Strict)، ونشر الإعداد. ستكون اللافتة الآن مرئية للمستخدمين :tada:

image

تعرف على المزيد حول أوضاع تكوين ملفات تعريف الارتباط هنا: compliance-modes-listener-permissive-strict | Customer Portal

بما أن Osano يستخدم عمال الويب، فنحن بحاجة أيضًا إلى إضافة blob: إلى توجيه worker-src. يجب القيام بذلك من خلال سمة مخصصة أو مكون، يرجى الرجوع إلى قسم “توسيع سياسة أمان المحتوى الافتراضية” في Mitigate XSS Attacks with Content Security Policy.

باختصار، تحتاج إلى إنشاء مكون سمة فارغ، مع المعلمات التالية في ملف settings.yml:

# settings.yml
extend_content_security_policy:
  type: list
  default: "worker_src: blob:"

:loudspeaker: إذا لم يتم عرض لافتتك، يرجى الرجوع إلى قسم استكشاف أخطاء CSP وإصلاحها.

One Trust

انتقل إلى https://www.onetrust.com/products/cookie-consent/، يمكنك التسجيل مجانًا لنطاقك الأول، أو البدء في اشتراك مدفوع من صفحة التسعير.

ستستلم بريدًا إلكترونيًا يرحب بك في OneTrust، يحتوي على رابط لتسجيل الدخول إلى المنصة، وسيرشدك خلال إعداد حسابك.

سيتم نقلك إلى https://app.onetrust.com/welcome. في أقسام التطبيقات المتاحة (Available Apps) أو تطبيقاتي (My Apps)، اختر تطبيق الامتثال لملفات تعريف الارتباط (Cookie Compliance).

حدد إضافة موقع ويب (Add Website).

أضف عنوان URL لموقعك الإلكتروني.

ابدأ المسح ثم حدد جمهورك (جمهورك): أطر الخصوصية التي تحتاج إلى الامتثال لها (مثل GDPR).

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

لإضافة اللافتة إلى Discourse، انتقل إلى قسم التكامل (Integration) في القائمة الجانبية، وحدد موقعك من القائمة.

انسخ نص CDN للإنتاج (Production CDN) من قسم سكريبتات الإنتاج (Production Scripts).

يمكنك إضافة النص البرمجي إلى Discourse من خلال مكون سمة أو عن طريق تعديل سمعتك مباشرة.

انتقل إلى لوحة تحكم المسؤول، تخصيص → سمات → مكونات، وانقر على “تثبيت” (Install).

انقر على “إضافة CSS/HTML” وأضف الكود الذي نسخته إلى قسم الرأس (Head).

وهذا كل شيء! يجب أن تبدو اللافتة شيئًا مثل:

:loudspeaker: إذا لم يتم عرض لافتتك، يرجى الرجوع إلى قسم استكشاف أخطاء CSP وإصلاحها.

ConsentManager

انتقل إلى Free test now! - ConsentManager GDPR solution وأنشئ حسابًا. اتبع المعالج لإعداد مدير الموافقة.

في الخطوة 4، قبل النقر على زر استمرار، قم بالتمرير لأسفل الصفحة. أسفل قسم “اختر نظامك”، ستجد قسمًا يسمى “الإعداد باستخدام النسخ واللصق”. اختر علامة التبويب الحجب شبه التلقائي (Semi-Automatic blocking)، وانسخ الكود الموجود في ذلك القسم.

يمكنك إضافة النص البرمجي إلى Discourse من خلال مكون سمة أو عن طريق تعديل سمعتك مباشرة.

انتقل إلى لوحة تحكم المسؤول، تخصيص → سمات → مكونات، وانقر على “تثبيت” (Install).

انقر على “إضافة CSS/HTML” وأضف الكود الذي نسخته إلى قسم الجسم (Body).

وهذا كل شيء! يجب أن تبدو اللافتة شيئًا مثل:

:loudspeaker: إذا لم يتم عرض لافتتك، يرجى الرجوع إلى قسم استكشاف أخطاء CSP وإصلاحها.

مكون سمة لافتة موافقة ملفات تعريف الارتباط

هذا المكون السمة سيسمح لك بإضافة لافتة موافقة ملفات تعريف الارتباط القابلة للتخصيص إلى منتداك. إنه يوفر ببساطة طريقة سهلة لمسؤولي Discourse لاستخدام لافتة موافقة ملفات تعريف الارتباط مفتوحة المصدر من Insites

للتعليمات حول تثبيت مكونات سمات Discourse، راجع: Installing a theme or theme component

استكشاف أخطاء CSP وإصلاحها

إذا لم يتم عرض لافتة موافقة ملفات تعريف الارتباط الخاصة بك:

  1. تحقق من أخطاء وحدة تحكم المتصفح: ابحث عن أي أخطاء متعلقة بـ CSP في وحدة تحكم متصفحك.
  2. تحقق من طريقة تحميل النص البرمجي: تأكد من تحميل نص الموافقة على ملفات تعريف الارتباط بشكل صحيح:
    • يتم تلقائيًا الثقة في السكريبتات المضافة إلى رؤوس السمات.
    • ستعمل السكريبتات التي يتم تحميلها ديناميكيًا عبر loadScript() أو عناصر النص البرمجي التي يتم إنشاؤها برمجياً مع strict-dynamic.
    • تجنب السكريبتات “المُحقنة بواسطة المحلل” (parser-inserted) (حقن HTML مباشرة مع وسوم النص البرمجي).
  3. تكوينات خاصة: قد تتطلب بعض مديري الموافقة تكوينات خاصة أو قد يكون لديهم متطلبات محددة للعمل مع CSP. راجع توثيقهم للتوافق مع CSP.
  4. unsafe-eval: إذا كان نص الموافقة على ملفات تعريف الارتباط الخاص بك يتطلب unsafe-eval، فلا يزال بإمكانك إضافة هذا إلى إعداد content security script src (مع علامات الاقتباس: 'unsafe-eval').

:warning: كن حذرًا عند إضافة 'unsafe-eval' أو توجيهات متساهلة أخرى، حيث يمكن أن تقلل من فعالية CSP.

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

خيارات أخرى لخدمات مدير المحتوى

بالإضافة إلى خيارات إدارة ملفات تعريف الارتباط المذكورة أعلاه، تتضمن خيارات أخرى لخدمات مدير الموافقة التي قد تعمل مع Discourse ما يلي:

سياسة ملفات تعريف الارتباط

يشرح هذا الدليل كيفية إضافة سياسة ملفات تعريف الارتباط من موردين مختلفين إلى صفحة /privacy في Discourse.

One Trust

ملاحظة: يمكنك قراءة الخطوات حول كيفية إعداد حساب OneTrust وإنشاء مكون سمة في القسم أعلاه.

  • قم بتفعيل دعم SPA في حساب OneTrust الخاص بك باتباع التعليمات الموضحة هنا.

  • أضف كتل الكود التاليتين واحدة تلو الأخرى إلى قسم الرأس (Head) في مكون السمة.

  • ملاحظة: تم أخذ الدالتين clearDup و reloadOTBanner من هذه الصفحة. تأكد من استخدامهما. إصدار هاتين الدالتين في الكود أدناه هو مجرد مثال وقد يكون قديمًا وقت قراءة هذا.

      <script type="text/x-handlebars" data-template-name="/connectors/below-static/add-cookie-policy">
          <div id="ot-sdk-cookie-policy"></div>
      </script>
    

      <script type="text/discourse-plugin" version="0.10.0">
          //يجب استخدامها فقط في سياسة ملفات تعريف الارتباط. قم بتشغيل الدالة أدناه لإزالة الفئات المكررة
          // تم أخذ النص البرمجي من: https://my.onetrust.com/s/article/UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046?language=en_US#UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046_section-idm45403310539216
      
          function reloadOTBanner() {
      
              var otConsentSdk = document.getElementById("onetrust-consent-sdk");
              if (otConsentSdk) {
                  otConsentSdk.remove();
              }
      
              if (window.OneTrust != null) {
                  OneTrust.Init();
      
                  setTimeout(function() {
                      OneTrust.LoadBanner();
      
                      var toggleDisplay = document.getElementsByClassName(
                          "ot-sdk-show-settings"
                      );
      
                      for (var i = 0; i < toggleDisplay.length; i++) {
                          toggleDisplay[i].onclick = function(event) {
                              event.stopImmediatePropagation();
                              window.OneTrust.ToggleInfoDisplay();
                          };
                      }
                  }, 1000);
              }
          }
          function clearDup() {
              var sec = document.getElementById("ot-sdk-cookie-policy")
              var tally = [];
              for (var i = sec.length - 1; i >= 0; i--) {
                  if (tally[sec[i].firstChild.innerText] === undefined) {
                      tally[sec[i].firstChild.innerText] = 1;
                  } else {
                      //console.log(i,sec[i].firstChild.innerText);
                      sec[i].remove();
                      //return true;
                  }
              }
              //return false;
          }
          api.onAppEvent("page:changed", (data) => {
              if(data.currentRouteName == 'privacy') {
                  reloadOTBanner();
                  clearDup();
              }
          })
      </script>
    

ملاحظات

  • إذا نظرت إلى وحدة تحكم المتصفح، فقد تجد أن دالة OptanonWrapper مفقودة من الملف الذي أضفت فيه موافقة ملفات تعريف الارتباط أو أي كود ذي صلة، لكن هذا ليس هو الحال. لا تقوم Discourse بإزالة كتلة الكود التي تحتوي على دالة OptanonWrapper، بل تقوم بتحويل هذه الكتلة إلى ملف خاص بها. يمكنك محاولة استدعاء هذه الدالة في وحدة تحكم JS في متصفحك للتأكد من أن الدالة موجودة فعليًا.
17 إعجابًا

لمستخدمي Cloudflare

https://community.cloudflare.com/t/how-to-create-custom-consent-modal-and-customise-it-using-zaraz-consent-api/699318