العربية

أدوات المطور · HTML هروب الكيان

فك تشفير كيانات HTML بدون لغة HTML الداخلية: كيفية عمل وحدة فك ترميز جدول البحث

· كيف يعمل

أتش تي أم أل حماية ترميز

يتم تعيين المراجع HTML المشفرة إلى نص غير ضار دون إنشاء DOM عقد
الرسم التوضيحي المتجه الأصلي ToolAcre

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

وحدة فك الترميز التي نفذت <img onerror> - حالة ملموسة حيث أصبح "فك التشفير فقط" هو تنفيذ البرنامج النصي

السطر المشترك element.innerHTML = الإدخال يفعل أكثر من مجرد فك تشفير &amp;. إذا كان الإدخال يحتوي أيضًا على <img src=x onerror=...>، فسيقوم المتصفح بإنشاء عنصر صورة وسمة معالج الأحداث. اعتمادًا على كيفية ربط تلك العقدة وتحميلها، يمكن أن يؤدي ذلك إلى تحويل اختصار التنسيق إلى تنفيذ البرنامج النصي. يجب أن تظل السلسلة التي تشبه HTML بيانات عندما تكون المهمة الوحيدة هي تحليل مراجع الأحرف، ولا يتم تحليلها في شجرة DOM.

ما يفعله InternalHTML فعليًا مع السلسلة - التحليل وإنشاء العناصر وسمات معالج الأحداث، وليس فقط استبدال الكيان

يستدعي InternalHTML المحلل اللغوي HTML: تصبح العلامات عقدًا، وتكتسب السمات معنى المتصفح، وتقوم قراءة textContent اللاحقة بإزالة العلامات من النتيجة. يمكن أن تختفي العلامة <strong> التي كنت تنوي الاحتفاظ بها كمدخل حرفي كتنسيق نص. لا يعد العنصر المنفصل ضمانًا عامًا للسلامة؛ غالبًا ما يعيد الكود إدراج تلك الشجرة الفرعية أو يستخدم HTML الناتج في مكان آخر. إذا كنت بحاجة إلى عرض مدخلات غير موثوقة، فقم بتعيين محتوى النص وتطهيره فقط عندما تختار عرض HTML عمدًا.

نهج جدول البحث - تعبير عادي لـ &name;, &#NNN; و &#xHHH;، وخريطة من الأسماء إلى الأحرف

تستخدم وحدة فك ترميز ToolAcre تعبيرًا عاديًا محددًا للعثور على مرجع للنموذج &name;، أو &#123;، أو &#x7B;. يتم البحث عن المراجع المسماة في جدول واضح عملي، بما في ذلك amp وlt وgt وعلامات الاقتباس والطباعة الشائعة. يتم ترك الاسم غير المعروف كما هو مكتوب بدلاً من تخمينه. لا ينشئ هذا الأسلوب أي عناصر ولا يستدعي المحلل اللغوي HTML؛ إنه ببساطة يستبدل السلاسل الفرعية المعترف بها في السلسلة. يعتبر الجدول مجموعة فرعية عن عمد، وليس كافة مراجع الأحرف المسماة HTML.

التعامل مع المراجع الرقمية - تحليل نقاط الكود العشرية والست عشرية وتحويلها إلى سلاسل، بما في ذلك الأحرف النجمية

للحصول على مرجع رقمي، قم بتحليل العلامة العشرية بعد &# أو الرقم الست عشري بعد &#x، ثم قم بتحويل نقطة الرمز الرقمي إلى حرف باستخدام String.fromCodePoint. القيمة النجمية مثل 0x1F600 تنتج رمزًا تعبيريًا، وليس حرفين مستقلين قابلين للطباعة. يقوم التنفيذ أيضًا بتعيين قيم نطاق التحكم Windows-1252 التاريخية كما تفعل المتصفحات؛ صفر، وتصبح نقاط الكود البديلة والقيم الأعلى من U+10FFFF حرفًا بديلاً. تعمل معالجة الأخطاء الصريحة هذه على منع الرقم غير الصالح من تعطل وحدة فك التشفير.

مثال عملي: فك تشفير سلسلة تمزج &amp; و&#169; و&#x1F600; - تم حل كل تطابق من الجدول أو الرقم

قم بفك تشفير الإدخال الحرفي &amp; و&#169; و&#x1F600;: يتم تعيين الخرائط المرجعية الأولى من خلال الجدول المسمى إلى &، ويصبح الرقم العشري 169 ©، ويصبح الرقم السداسي 1F600 😀. قم بتضمين <img onerror="alert(1)"> الخام بجانبها. تقوم وحدة فك التشفير بإرجاع هذا التسلسل الذي يشبه العلامة كأحرف سلسلة عادية؛ لا يقوم بإنشاء صورة أو تنفيذ حدث. عند وضع النتيجة في صفحة حقيقية لاحقًا، استخدم مصدرًا آمنًا للنص بدلاً من أخذ السلسلة التي تم فك تشفيرها وتعيينها مرة أخرى إلى InternalHTML.

ما لن يفعله نهج الجدول - المراجع القديمة الخالية من الفواصل المنقوطة ومراوغات استرداد أخطاء المحلل اللغوي، ما لم يتم تنفيذها عمدًا

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

ما لا يغطيه هذا — تطهير HTML الذي تنوي عرضه، وهي مشكلة مختلفة

لا يؤدي فك تشفير المراجع إلى تعقيم HTML للعرض. إذا كان النص الذي تم فك ترميزه يحتوي على تسلسل <script>، فسيظل الأمر خطيرًا إذا قام جزء مختلف من التطبيق بإدراجه لاحقًا كعلامة. تحتاج سياقات مثل السمة HTML وسلسلة JavaScript وURL إلى تشفير الإخراج وسياسته الخاصة. ToolAcre يقوم بإرجاع النص؛ لا يمكنها أن تجعل الحوض غير الآمن في المستقبل آمنًا.

الوجبات الجاهزة: تعامل مع الإدخال كبيانات - كيف يتم فك تشفير وحدة هروب الكيان HTML باستخدام جدول بحث بدلاً من المحلل اللغوي HTML، بحيث يظل إدخالك نصًا

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