ترميز / فك ترميز رموز HTML
حوّل الأحرف الخاصة إلى رموز HTML (&، <، ©) أو فُكّ ترميز الرموز إلى نص مقروء — في الاتجاهين، فوريًا.
972 مشاهدة
كيف يعمل
يحجز HTML عدداً قليلاً من الأحرف لصياغته الخاصة: < و> يُحددان العلامات (tags)، و& يبدأ إشارة إلى رمز (entity). إذا ظهرت هذه الأحرف حرفياً داخل محتوى يُدرَج في صفحة — تعليق، اسم مستخدم، استعلام بحث يُعرَض مجدداً على الشاشة — فسيحاول المتصفح تفسيرها كترميز بدلاً من عرضها كنص. الترميز (Encoding) يحوّلها إلى صيغة الرمز (<، >، &) بحيث تُعرَض كأحرف حرفية بدلاً من أن تُفسَّر. أما فك الترميز (Decoding) فيعكس ذلك، محوّلاً رموزاً مثل & أو ’ إلى الأحرف الفعلية التي تمثّلها.
هذا ليس تفصيلاً شكلياً — بل هو ضابط أمني. فإذا أخذ مربع تعليقات مُدخَلات المستخدم وأدرجها في صفحة HTML دون ترميزها أولاً، يمكن لزائر أن يكتب <script>...</script> ويجعل ذلك الكود يعمل فعلياً في متصفح كل زائر آخر: يُسمّى هذا النوع من الثغرات البرمجة النصية عبر المواقع (XSS)، وترميز أي مُخرَجات غير موثوقة قبل أن تلامس HTML هو خط الدفاع القياسي ضدها. على سبيل المثال، ترميز النص 5 < 10 & 10 > 5 ينتج 5 < 10 & 10 > 5، الذي يُعرَض بشكل صحيح ولا يمكن الخلط بينه وبين ترميز.
ما يجب أن تعرفه
- الرموز المسماة والرقمية تمثّل الحرف نفسه بطريقتين مختلفتين.
'(مسمّى) و'(رقمي) يعنيان كلاهما علامة اقتباس مفردة، لكن الرموز المسماة تعتمد على تعرّف المحلِّل على ذلك الاسم بعينه — بينما الرموز الرقمية (عشرية أو سداسية عشرية بصيغة&#x) مدعومة عالمياً وأكثر أماناً للمخرجات المُولَّدة آلياً. - الترميز ليس خط الدفاع الوحيد. فهو يحمي محتوى النص فقط؛ أما السمات (attributes) والروابط وسياقات جافاسكريبت المضمّنة فتحتاج قواعد تهريب خاصة بها، لأن قيمة داخل
href="javascript:..."أو داخل كتلة<script>تُحلَّل بقواعد مختلفة عن نص الجسم العادي. - التحويل محلي بالكامل. تستخدم هذه الأداة محلل DOM الخاص بمتصفحك نفسه — لا يُرفع أو يُسجَّل أي شيء.
- ليست كل لغات القوالب من جهة الخادم تُهرّب المخرجات تلقائياً. بعضها (مثل مخرجات PHP القديمة أو دمج النصوص الخام) يتطلب استدعاء دالة تهريب صراحةً — ونسيان ذلك من أكثر أسباب ثغرات XSS الواقعية شيوعاً.
- بعض الرموز تبدو متطابقة تقريباً بصرياً. علامة الاقتباس المستقيمة (
') وعلامة الاقتباس المفردة اليمنى المطبعية (’) تُعرَضان بشكل شبه متماثل على الشاشة لكنهما تسلسلا بايتات مختلفان — وهذا فرق مهم في عيّنات الكود أو الروابط.
مثال ملموس قبل وبعد: حقل تعليق يحتوي على رائع! 5 < 10، أليس كذلك؟ لا يحتاج معاملة خاصة كنص عادي، لكن بمجرد إدراجه في قالب HTML دون تهريب، يمكن لزائر خبيث أن يرسل بدلاً من ذلك <img src=x onerror=alert(1)> — الترميز يحوّل ذلك إلى نص خامل ومرئي بدلاً من معالج خطأ صورة يعمل فعلياً.
الأسئلة الشائعة
لماذا نُرمّز النص قبل وضعه في HTML؟
قد يُفسَّر الرمز < أو & غير المُهرَّب داخل محتوى HTML كجزء من الترميز، مما يكسر تخطيط الصفحة أو — والأسوأ — يسمح لعلامات <script> أو <img onerror> المحقونة بأن تعمل فعلياً (البرمجة النصية عبر المواقع، XSS). الترميز إلى < و& يُبقي النص حرفياً وخاملاً، بغض النظر عمّا كتبه المستخدم.
هل يتعامل مع الرموز المسماة والرقمية معًا؟
نعم — يفهم فك الترميز كلاً من الرموز المسماة (&copy;) والرقمية، سواء العشرية (&#169;) أو السداسية عشرية (&#x00A9;). الرموز الثلاثة كلها تمثّل الحرف © نفسه؛ تُرجِع الأداة أياً منها إلى الرمز الفعلي.
لماذا نستخدم رمزاً رقمياً بدلاً من رمز مسمّى، أو العكس؟
الرموز المسماة (&apos;، &hellip;) أسهل قراءة في كود المصدر، لكنها تعتمد على تعرّف المحلِّل على ذلك الاسم بعينه — وعدد قليل من الرموز الأقل شيوعاً يحظى بدعم غير متسق عبر الأدوات القديمة. أما الرموز الرقمية (&#39;، &#8230;) فمفهومة عالمياً من قِبل كل محلل HTML بغض النظر عن عمره أو مورّده، ولهذا تفضّلها الأدوات الآلية ومكتبات التعقيم غالباً.
هل الترميز وحده يجعل صفحتي آمنة من XSS؟
إنه يعالج عُقد النص، لكن HTML له سياقات حقن أخرى — داخل قيمة سمة، داخل رابط، داخل كتلة <script> أو <style> — وكل منها يحتاج نهج تهريب خاصاً به، لأن محلل المتصفح يبدّل قواعده حسب موضعه في المستند. ترميز محتوى النص طبقة أساسية واحدة، وليس الدفاع الكامل؛ أما خطوة "التعقيم" الأوسع التي تُزيل أو تعيد كتابة علامات كاملة فهي أداة منفصلة وأكثر تحديداً لحين رغبتك عمداً بالسماح ببعض HTML المحدود.
هل يُرسَل نصي إلى أي مكان؟
لا — يتم التحويل فورياً داخل متصفحك باستخدام محلل DOM الخاص به؛ لا يُرفع أو يُسجَّل أو يُخزَّن أي شيء، مما يجعله آمناً لاختبار محتوى حقيقي أدخله مستخدم، بما في ذلك أي شيء تشك في احتوائه على محاولة حقن.
أدوات مشابهة
الإبلاغ عن مشكلة
ترميز / فك ترميز رموز HTML
التعليقات
لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!