أخطاء في معالجة Discourse لمعرفات URI في محتوى markdown

urn:records:test:3 هو URI صالح وفقًا لـ RFC 3986.

لا يتعامل Discourse معه بشكل صحيح، بغض النظر عن تنسيق Markdown المستخدم.

  • فقط الصقه كما هو، مثل URI HTTP، وسيتجاهل Discourse تمامًا حقيقة أنه URI، كما هو موضح هنا: urn:records:test:3.

  • ضعه بين <>، مثل <urn:records:test:3>، وسيعكس Discourse آخر شقين، كما هو موضح هنا: urn:records:3:test. عند النقر بزر الماوس الأيمن والنسخ، ستحصل إما على urn:records أو test:3، اعتمادًا على مكان مؤشر الماوس بالضبط. أما عند النقر بزر الماوس الأيسر، فلا يحدث شيء لأنه لا يُعامل كـ URI بشكل كامل.

  • ضعه في تنسيق رابط كامل، أي [نص فوق `urn:records:test:3`](urn:records:test:3)، وسيقوم Discourse بحذف الشق الأخير من النص القابل للنسخ بالنقر بزر الماوس الأيمن – وهو مرة أخرى غير قابل للنقر مباشرة – من الـ URI. يظهر هنا في نص فوق urn:records:test:3، حيث يؤدي النسخ بالنقر بزر الماوس الأيمن إلى الحصول على urn:records:test، أو كما في [`urn:records:test:3`](urn:records:test:3)، يظهر هنا في urn:records:test:3، حيث يؤدي النسخ بالنقر بزر الماوس الأيمن إلى الحصول على urn:records:test أو 3، اعتمادًا على مكان مؤشر الماوس بالضبط.

لم أقم بإجراء اختبارات شاملة لجميع هياكل URI الصالحة. urn:records:test:3 هو مجرد مثال محلي حقيقي من واقع الاستخدام.

3 إعجابات

في الواقع، إعداد الموقع allowed_href_schemes يعمل فقط مع المخططات التي تستخدم تنسيق scheme://.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/addon/sanitizer.js#L59

4 إعجابات

لا أستطيع تحديد ما إذا كان ذلك اعترافًا بوجود خلل، أم أنه يقول “نعم، هذا هو السلوك المتوقع”…

يرجى التوضيح؟

إعجاب واحد (1)

هذه بالفعل خطأ. والسبب هو كود التنظيف الخاص بنا الذي يتعرف فقط على مخططات href التي تبدأ بتنسيق scheme://.

5 إعجابات

لقد واجهت للتو هذه المشكلة مع URI الجغرافي، الذي يبدو هكذا geo:36.95733984,-122.0172856.

أرى أن هناك استثناءً لـ URI الهاتف:

    if (allowedHrefSchemes.includes("tel")) {
      extraHrefMatchers.push(new RegExp("^tel://\\+?[\\w\\.\\-]+", "i"));

هناك صفحة https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml، لكنني استخدمت List of URI schemes - Wikipedia للتحقق من المخططات لأنها تتضمن أمثلة. أنا أبحث في، أم، “لاحقة” اسم المخطط، وهي :// (ما اسم هذا؟ “تنسيق المخطط”؟).

من خلال المراقبة الدقيقة، يبدو أن هناك ثلاثة أنماط فقط مستخدمة:

  • ://
  • :/
  • :

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

لا أعرف كيفية التحقق من كل مخطط على حدة… :thinking:


الأسماء غير الرسمية التي اخترتها لهذه التنسيقات:

  • : “ملاحظ”
  • :/ “متشكك”
  • :// - “متشكك مرتين”
إعجاب واحد (1)

نسخ ولصق النص التالي في Discourse:

للتواصل الآمن عبر الرسائل والمكالمات، تواصل معي عبر Snikket/XMPP على xmpp:maiki@chat.v2.talkgroup.xyz.

ينتج عنه (بعد إضافة xmpp إلى allowed href schemes):

للتواصل الآمن عبر الرسائل والمكالمات، تواصل معي عبر Snikket/XMPP على <a href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz" dir="ltr">xmpp:maiki@chat.v2.talkgroup.xyz</a>.

المشكلة في هذه الحالة هي href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz". نذكر هذا كحالة استخدام لهذه العلة. :slight_smile:

إعجابَين (2)

هل يمكن أن يكون هذا حلاً بديلاً لـ GEO URI بأي شكل من الأشكال؟ أنا لست مطورًا.