سؤال

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

ما هي مزايا وعيوب لغات الترميز المختلفة مثل:

أو بعبارة أخرى، ما هي العوامل التي تأخذها في الاعتبار عند اختيار استخدام لغة ترميزية معينة؟

هل كانت مفيدة؟

المحلول

يعد Marmdown و BBCode و Textile و MediaWiki كلها نفس المفهوم العام ، لذلك سأقوم حقًا بتجميع هذا في فئتين: HTML ، وعلامة نصية عادي.

لغة البرمجة

الصفقة مع HTML هي المحتوى بالفعل في نموذج "قابل للتقدم" لمحتوى الويب. هذا رائع ، يوفر وقت المعالجة ، وهي لغة قادرة بسهولة. هناك العشرات من المكتبات في أي لغة إلى حد كبير للتعامل مع محتوى HTML ، وتحويلها إلى/من HTML إلى تنسيقات أخرى ، إلخ يعتمد دائمًا على إدخال عاقل عند قبول HTML من المستخدمين. كما هو موضح ، يكون ترتيب أو تخفيف HTML أمرًا صعبًا للغاية ، خاصةً لأنه يفشل في اتباع قواعد الترميز الطبيعية بالطريقة التي تعمل بها XML (أي العلامات المغلقة بشكل غير صحيح).

ترميز نص عادي

كثيرا ما تستخدم هذه الفئة للأسباب التالية:

  • سهل التحليل في أشكال متعددة من مصدر واحد - PDF ، HTML ، RTF
  • يتم تخزين المحتوى في نص عادي قابل للقراءة (عادة ما يكون أسهل بكثير من القراءة من HTML الخام) إذا لزم الأمر في وقت لاحق ، بدلاً من الحاجة إلى الاستخراج من HTML
  • يتبع قواعد محددة محددة حيث يمكن أن يكون HTML متغيرًا مزعجًا وغير منظم
  • يتيح لك فرض مجموعة فرعية من تنسيق المحتوى أكثر ملاءمة في كثير من الحالات من مجرد السماح HTML الكامل
  • بالإضافة إلى فرض مجموعة فرعية من HTML يجعل من السهل تعقيم المدخلات ومنع مشاكل البرمجة النصية عبر الموقع وما إلى ذلك.
  • إن الاحتفاظ بالبيانات "الخام" بتنسيق مستخلص يعني أنه في وقت لاحق ، إذا أردت على سبيل المثال تحويل موقعك من HTML 4 إلى XHTML ، فأنت بحاجة فقط إلى تغيير رمز التحليل. من خلال إدخال المستخدم HTML المنسق ، أنت عالق الآن في تحويل جميع HTML إلى XHTML بشكل فردي ، والتي تظهر دائمًا ، كما تظهر HTML ، مهمة بسيطة. وبالمثل ، إذا جاءت لغة ترميز جديدة في وقت ما أو كنت بحاجة إلى الانتقال إلى تنسيق بديل (RTF ، PDF ، TEX) ، فإن مجموعة فرعية مقيدة مستخرجة من خيارات تنسيق النص تجعل من هذه المهمة الأكثر بساطة.

خلاصة القول هي ما هو إدخال المستخدم المستخدم. إذا كنت تخطط للحفاظ على البيانات حولها وقد تحتاج إلى خلط التنسيقات وما إلى ذلك ، فمن المنطقي استخدام تنسيق مجردة دقيق لتخزين المعلومات. إذا كنت بحاجة إلى العمل مع البيانات الأولية يدويًا لأي سبب من الأسباب ، فعندئذٍ ، فإن نقاط المكافأة إذا كان هذا التنسيق قابلاً للقراءة البشرية بسهولة. إذا كنت تعرض المحتوى فقط في صفحة ويب (أو DOC HTML لتقرير وما إلى ذلك) وليس لديك مخاوف بشأن تحويله أو عزله في المستقبل ، فهذا ممارسة معقولة لتخزينها في HTML.

نصائح أخرى

جيف ناقش بعض إيجابيات وسلبيات على codinghorror.com أثناء وجودهم في المراحل الأولية من تجميع ذلك. اعتقدت أنها كانت قراءة جديرة بالاهتمام.

@ netrox قاعدة البيانات ليست هي المشكلة، بل مخرجات المتصفح هي المشكلة.

القلق الوحيد هو العرض النهائي الذي يمكن كسره بواسطة HTML الذي أدخله المستخدم.على سبيل المثال، يمكن للمستخدم فتح ملف <li> علامة ولكن لا تغلقها أبدًا، الأمر الذي قد يؤدي إلى كسر التخطيط التالي بالكامل، اعتمادًا على كيفية تنظيم الصفحة.أو مثال آخر افتح أ <strong> العلامة دون إغلاقها، مما يجعل كل المحتوى المتبقي غامقًا.

لذا، لا يجب التحقق من صحة العلامات المسموح بها فحسب، بل كيف تسمح بالضبط ببعض العلامات دون السماح بالعلامات الأخرى؟لأنه من السهل جدًا منع تحليل جميع علامات HTML باستخدام htmlspecialchars() طريقة PHP، على سبيل المثال، ولكن عندما يتعلق الأمر بالسماح ببعض العلامات، سيتعين عليك البحث عن طرق أخرى.هنالك ال strip_tags() وظيفة PHP التي تزيل (تحذف تمامًا) العلامات غير المسموح بها، ولكن هذا يعني تغيير محتوى المستخدم بطريقة سيئة، مما يمنع المستخدم من نشر تعليمات برمجية بسيطة على سبيل المثال (رمز للمشاركة/العرض، وليس رمز للمعالجة).

إلى جانب كسر التصميم، يجب أن تفكر في هجمات XSS، مثل إدراج جافا سكريبت في سمة href الخاصة بالرابط، والتي على سبيل المثال يمكن أن تعيد توجيه المستخدمين إلى موقع آخر.راجع هذه القائمة الطويلة من هجمات XSS المحتملة: https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

كما ترى، يعد منع تفسير جميع علامات HTML أمرًا سهلاً للغاية، ولكن منع بعض العلامات فقط هو أمر أكثر تعقيدًا.لفهم ذلك، يمكنك إلقاء نظرة على الحجم الهائل "تنقية HTML"إطار العمل الذي غرضه الوحيد هو السماح ببعض علامات HTML والتأكد من صحة HTML الناتج (أي.لن يؤدي إلى كسر الصفحة) وخالي من هجمات XSS.

"تم إنشاء العديد من لغات الترميز المختلفة لأنه من الصعب القول أن تعقيم HTML."

هل حقا؟ كيف يكون الأمر صعبًا؟ هناك وظائف لإزالة سمات أو علامات خطيرة محتملة والتحقق من صحة HTML قبل إدخالها في قاعدة البيانات أو الملف. هل يمكنك أن تعطيني أمثلة على مدى صعوبة تعقيم HTML؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top