
DOMPurify v3.4.13
DOMPurify - أداة تعقيم XSS تعمل على DOM فقط، فائقة السرعة ومتسامحة للغاية، لـ HTML وMathML وSVG. يعمل DOMPurify بإعداد افتراضي آمن، لكنه يوفر الكثير من خيارات الإعداد والخطافات. عرض توضيحي:
DOMPurify
DOMPurify هو مُطهِّر XSS يعمل على DOM فقط، فائق السرعة، وشديد التحمل، مخصص لـ HTML وMathML وSVG.
كما أنه بسيط جدًا في الاستخدام والبدء به. بدأ تطوير DOMPurify في فبراير 2014، وقد وصل في هذه الأثناء إلى الإصدار v3.4.17.
يعمل DOMPurify كلغة JavaScript ويعمل في جميع المتصفحات الحديثة (Safari (10+)، Opera (15+)، Edge، Firefox وChrome - بالإضافة إلى أي شيء آخر تقريبًا يستخدم Blink أو Gecko أو WebKit). وهو لا يتعطل على MSIE أو المتصفحات القديمة الأخرى. بل ببساطة لا يفعل شيئًا.
لاحظ أن DOMPurify v2.5.9 هو أحدث إصدار يدعم MSIE. للحصول على تحديثات أمنية مهمة متوافقة مع MSIE، يُرجى استخدام فرع 2.x.
تغطي اختباراتنا الآلية 9 تركيبات من المتصفحات/أنظمة التشغيل على المحركات الحالية (Chromium وFirefox وWebKit عبر Ubuntu وmacOS وWindows) عند كل عملية دفع، كما تعيد مصفوفة منفصلة تشغيل مجموعة الاختبارات على لقطات محركات أقدم (تعود إلى ما يقارب Chromium 110 وFirefox 108 وWebKit 16.4، أي نحو ثلاث سنوات) بحيث يتم اكتشاف أي تراجعات على المتصفحات القديمة أيضًا. كما نشغّل Node.js v20 وv22 وv24 وv25 وv26 مع DOMPurify على jsdom. من المعروف أن إصدارات Node الأقدم تعمل أيضًا، لكن... لا ضمانات.
DOMPurify مكتوب بواسطة أشخاص من مجال الأمن لديهم خلفية واسعة في هجمات الويب وXSS. لا تخف. لمزيد من التفاصيل، يُرجى أيضًا قراءة أهداف الأمان ونموذج التهديد الخاص بنا. يُرجى قراءته. حقًا. وإذا كنت تستمتع بالتفاصيل الدموية، فإن صفحة فئات الهجمات وتاريخ التجاوزات توثّق حيل تحوير المحلل (parser-mutation) والنطاقات (namespace) والتلاعب بالخصائص (clobbering) والقوالب التي يحمي منها DOMPurify.
ألهم مشروع DOMPurify إنشاء HTML Sanitizer API، والذي يتم شحنه بالفعل في العديد من المتصفحات. ويجري الآن توحيد القدرة نفسها مباشرةً في مواصفة WHATWG HTML.
جدول المحتويات
- ماذا يفعل؟
- كيف أستخدمه؟
- هل هناك عرض توضيحي؟
- ماذا لو وجدت خطأً أمنيًا؟
- هل يمكنكم إعطائي بعض عينات التنقية؟
- ما المدعوم؟
- ماذا عن المتصفحات القديمة مثل Internet Explorer؟
- ماذا عن DOMPurify وTrusted Types؟
- هل يمكنني تكوين DOMPurify؟
- التكوين الدائم
- الخطافات
- التكوين المُزال
- التكامل المستمر
- قائمة البريد الأمنية
- من ساهم؟
ماذا يفعل؟
يقوم DOMPurify بتنقية HTML ومنع هجمات XSS. يمكنك تمرير نص مليء بـ HTML غير النظيف إلى DOMPurify وسيعيد نصًا (ما لم يُكوَّن على خلاف ذلك) يحتوي على HTML نظيف. سيزيل DOMPurify كل ما يحتوي على HTML خطير وبالتالي يمنع هجمات XSS وغيرها من الأمور الضارة. كما أنه سريع للغاية. نستخدم التقنيات التي يوفرها المتصفح ونحوّلها إلى مرشّح XSS. كلما كان متصفحك أسرع، كان DOMPurify أسرع.
كيف أستخدمه؟
الأمر سهل. ما عليك سوى تضمين DOMPurify في موقعك الإلكتروني.
استخدام النسخة غير المصغّرة (source-map متاح)
<script type="text/javascript" src="dist/purify.js"></script>
استخدام النسخة الإنتاجية المُصغّرة والمُختبرة (source-map متاح)
<script type="text/javascript" src="dist/purify.min.js"></script>
بعد ذلك يمكنك تنقية السلاسل النصية بتنفيذ الكود التالي:
const clean = DOMPurify.sanitize(dirty);
أو ربما هذا، إذا كنت تحب العمل مع Angular أو ما شابه:
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
يمكن كتابة HTML الناتج في عنصر DOM باستخدام innerHTML أو في DOM باستخدام document.write(). هذا متروك لك بالكامل.
لاحظ أننا نسمح افتراضيًا بـ HTML وSVG و MathML. إذا كنت تحتاج إلى HTML فقط، وهو ما قد يكون حالة استخدام شائعة جدًا، فيمكنك إعداد ذلك بسهولة أيضًا:
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
هل هناك أي احتمال لأخطاء خطيرة؟
حسنًا، يُرجى ملاحظة أنه إذا قمت أولًا بتعقيم HTML ثم عدّلته بعد ذلك، فقد تُبطل آثار التعقيم بسهولة. إذا مرّرت الترميز المُعقَّم إلى مكتبة أخرى بعد التعقيم، فيُرجى التأكد من أن المكتبة لا تعبث بـ HTML من تلقاء نفسها. راجع أهداف الأمان ونموذج التهديد للاطلاع على وصفات الاستخدام الآمن والوسوم/السمات التي تستحق التفكير مرتين قبل استخدامها، وفئات الهجمات وتاريخ التجاوز لمعرفة سبب إفشال المعالجة اللاحقة وتغيير سياق الترميز لعملية التعقيم.
ماذا عن تمرير عقدة DOM بدلًا من سلسلة نصية؟
يقبل DOMPurify.sanitize() أيضًا عقدة DOM (وهي Element أو DocumentFragment أو Document). منذ الإصدار 3.4.14 أصبح هذا المسار محصّنًا للعقد التي لم تخرج من محلل HTML: فالعقدة المبنية باستخدام DOM API أو المحلَّلة كـ XML/XHTML (على سبيل المثال عبر DOMParser مع application/xhtml+xml وimportNode()) قد تحمل أسماء سمات محفوظة بحالة الأحرف مثل ONERROR، أو عنصر نص خام مثل <style> يحتوي على عنصر فرعي أو وسم إغلاق خاص به داخل نصه. كلا الشكلين غير مرئي لمعقّم السلاسل النصية لأن محلل HTML لا يمكنه بناءهما أبدًا، لكنهما يفلتان عند إعادة التحليل. يزيل DOMPurify الآن السمات عبر عقدة Attr الدقيقة الخاصة بها ويعامل أشجار النص الحرفي هذه على أنها غير آمنة، لذا فإن خلط سياقات المستندات على جانب الإدخال أصبح مغطى. ويبقى من مسؤوليتك ألا تخلط السياقات على جانب الإخراج، راجع الفقرة أعلاه.
حسنًا، هذا منطقي، لننتقل إلى ما بعد ذلك
بعد تعقيم الترميز الخاص بك، يمكنك أيضًا إلقاء نظرة على الخاصية DOMPurify.removed ومعرفة العناصر والسمات التي تم استبعادها. يُرجى عدم استخدام هذه الخاصية لاتخاذ أي قرارات حساسة أمنيًا. فهي مجرد مساعد صغير للعقول الفضولية.
تشغيل DOMPurify على الخادم
يعمل DOMPurify تقنيًا أيضًا على جانب الخادم مع Node.js. ويسعى دعمنا إلى اتباع دورة إصدارات Node.js.
يتطلب تشغيل DOMPurify على الخادم وجود DOM، وهو ما لا يُفاجئ أحدًا على الأرجح. عادةً ما تكون jsdom هي الأداة المختارة، ونحن نوصي بشدة باستخدام أحدث إصدار من jsdom.