لدينا Discourse مثبت على site1. نمتلك/ندير site2.tld ونريد الوصول إلى المنتدى عبر iFrame من صفحة هناك. لست ماهرًا في فن CSP-fu، لذا فإن المساعدة محل تقدير.
لا أريد تعطيل قيود الأسلاف، ولكن مؤقتًا، قمت بإلغاء تحديد إطار الأسلاف CSP:
لا يمكن لـ Firefox فتح هذه الصفحة
لحماية أمانك، لن يسمح forum.site1.org لـ Firefox بعرض الصفحة إذا قام موقع آخر بتضمينها. لرؤية هذه الصفحة، تحتاج إلى فتحها في نافذة جديدة.
نظرت في التضمين ولكن يبدو أن هذه الميزة تخدم غرضًا مختلفًا. لا نريد التقييد بموضوع واحد، ولن يكون المستخدم مسجلاً للدخول. في البداية، لا بأس إذا لم يسجل المستخدم الدخول وكان المنتدى بأكمله متاحًا للقراءة فقط.
لا نوصي، ولا نختبر، باستخدام Discourse مضمنًا بالكامل في موقع آخر عبر إطارات iframe.\n\nبدلاً من ذلك، نوصي بأن يكون كل موقع على نطاقه الخاص، باستخدام الروابط، وتسجيل الدخول الأحادي، وتصميم Discourse لمطابقة الجانب المرئي لموقعك الرئيسي.
يوجد خادم Discourse واحد، وكالعادة، أي عدد من حسابات المستخدمين والضيوف. يمتلك المستخدمون المسجلون تطبيقًا يستضيف خادم ويب محليًا. يتم إنشاء صفحة ويب في هذا التطبيق ويتم الوصول إليها من متصفح محلي كـ http://192.168.1.1:8080. توفر صفحة الويب هذه المنتدى عبر IFrame.
ليس لدينا سيطرة على الشبكات الفرعية التي تقدم المحتوى، لذا يمكن أن يكون عنوان IP من أي NAT/DHCP شائع. ولكن لدينا سيطرة كاملة على ما يلي:
تثبيت وخادم Discourse.
المحتوى الذي يتم تقديمه.
رقم المنفذ هو عادةً 8080، ويمكن للمستخدم تكوينه، ولكنه لن يكون أبدًا 80 أو 443.
نظرًا لأن هذا محتوى محلي وليس ذا أهمية قصوى، فهو غير مؤمن بـ SSL.
يجب أن يكون لدى المستخدمين حساب Discourse ويجب عليهم تسجيل الدخول إلى Discourse للوصول للكتابة.
فيما يتعلق بالأمان:
يمكن الوصول إلى المنتدى العام عبر اسم المضيف.
الوصول إلى الشبكة مؤمن دائمًا بـ SSL بالطبع.
لا يمكن لأحد إنشاء محتوى المنتدى إلا إذا قام بتسجيل الدخول.
لذا نعم، الصفحة المحلية مع IFrame يتم تقديمها كـ HTTP: ولكن مصدر IFrame هو HTTPS://forum.site.tld. (قد يكون هذا الاختلاف في البروتوكول هو سبب فشل الوصول إلى المنتدى حتى مع تعطيل CSP.)
بمجرد أن يبدأ المستخدم متصفحه، للوصول إلى الخادم المحلي، يجب عليه إدخال كلمة مرور. يمكننا تمكين SSL لهذه الصفحة إذا لزم الأمر للحفاظ على الاتساق بين تلك الصفحة الأصلية و IFrame إلى موقع المنتدى الذي تم تمكين SSL له.
ليس لدينا أو ننوي البرمجة النصية عبر IFrame إلى Discourse. كل ما نريد فعله هو استضافة المنتدى في حاوية.
فيما يلي بعض الأفكار العشوائية التي قد لا تكون ذات قيمة:
السماح للمستخدمين بالحصول على مفتاح API من صفحة حساب Discourse الخاصة بهم، والذي يمكنهم وضعه في التطبيق، والذي سيتم بعد ذلك تمريره إلى Discourse في ملف تعريف ارتباط أو بطريقة أخرى. هذا يؤكد أنه بينما المستخدم ليس متوافقًا مع CORS أو CSP، إلا أنه لديه الإذن بالوصول إلى الموارد.
جعل التطبيق يقوم بحقن رمز مميز في عنوان URI الخاص بـ IFrame إلى Discourse. في نفس الوقت، استخدم استدعاء API لجعل Discourse يسمح بالاتصالات الواردة بهذا الرمز المميز. (نعم، سيتطلب ذلك البرمجة).
الحصول على المزيد من الإحراج… إنشاء صفحة على موقع مجتمعي تفتح IFrame لمحتوى الشبكة الفرعية، و IFrame آخر للمنتدى. يمكن تفويض هذا الموقع للوصول عبر المواقع.
التخلي عن محاولة التحايل على السياسات واستخدام target=window لفتح Discourse خارج نافذة التطبيق.