
DOMPurify v3.4.13
DOMPurify - أداة تعقيم XSS تعمل على DOM فقط، فائقة السرعة ومتسامحة للغاية، لـ HTML وMathML وSVG. يعمل DOMPurify بإعداد افتراضي آمن، لكنه يوفر الكثير من خيارات الإعداد والخطافات. عرض توضيحي:
DOMPurify
DOMPurify هو مُنقّي XSS سريع للغاية ومتسامح للغاية ويعمل على DOM فقط، مخصص لـ HTML وMathML وSVG.
كما أنه سهل الاستخدام والبدء معه بشكل كبير. بدأ مشروع DOMPurify في فبراير 2014 وقد وصل في هذه الأثناء إلى الإصدار v3.4.15.
يعمل 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. لا تقلق. لمزيد من التفاصيل، يرجى أيضًا قراءة أهدافنا الأمنية ونموذج التهديد. يرجى قراءته. حقًا. وإذا كنت تستمتع بالتفاصيل الدقيقة، فإن صفحة فئات الهجمات وتاريخ الالتفاف تفهرس حيل تحوير المحلل اللغوي، والمساحات الاسمية، والاستبدال، والقوالب التي يدافع عنها DOMPurify.
ألهم مشروع DOMPurify إنشاء HTML Sanitizer API، والذي أصبح متاحًا بالفعل في العديد من المتصفحات. يتم الآن توحيد نفس القدرة مباشرة في مواصفات WHATWG HTML.
جدول المحتويات
- ماذا يفعل؟
- كيف أستخدمه؟
- هل توجد نسخة تجريبية؟
- ماذا لو وجدت خطأ أمنيًا؟
- بعض نماذج التنقية من فضلك؟
- ما الذي يُدعم؟
- ماذا عن المتصفحات القديمة مثل Internet Explorer؟
- ماذا عن DOMPurify وTrusted Types؟
- هل يمكنني تكوين DOMPurify؟
- التكوين الدائم
- الخطافات
- التكوين المُزال
- التكامل المستمر
- القائمة البريدية الأمنية
- من ساهم؟
ماذا يفعل؟
يقوم DOMPurify بتنقية HTML ويمنع هجمات XSS. يمكنك إطعام DOMPurify على سبيل المثال سلسلة مليئة بـ HTML القذر وسيعيد سلسلة (ما لم يتم تكوينه بخلاف ذلك) تحتوي على HTML نظيف. سيقوم DOMPurify بإزالة كل ما يحتوي على HTML خطير وبالتالي يمنع هجمات XSS وغيرها من الأمور السيئة. كما أنه سريع بشكل مذهل. نستخدم التقنيات التي يوفرها المتصفح ونحولها إلى مرشح XSS. كلما كان متصفحك أسرع، كان DOMPurify أسرع.
كيف أستخدمه؟
الأمر سهل. فقط قم بتضمين DOMPurify في موقعك الإلكتروني.
استخدام النسخة غير المصغّرة (مع توفر خريطة المصدر)```html
### استخدام النسخة المصغّرة والمختبرة للإنتاج (مع توفر خريطة المصدر)```html
<script type="text/javascript" src="dist/purify.min.js"></script>
بعد ذلك، يمكنك تنظيف السلاسل النصية عن طريق تنفيذ الكود التالي:```js const clean = DOMPurify.sanitize(dirty);
أو ربما هذا، إذا كنت تحب العمل مع Angular أو ما شابه ذلك:```js
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
يمكن كتابة HTML الناتج في عنصر DOM باستخدام innerHTML أو في DOM باستخدام document.write(). الأمر متروك لك تمامًا.
لاحظ أنه افتراضيًا، نسمح بـ HTML وSVG و MathML. إذا كنت تحتاج فقط إلى HTML، وهو ما قد يكون حالة استخدام شائعة جدًا، يمكنك إعداد ذلك بسهولة أيضًا:```js
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
### هل توجد أي احتمالات لوجود أخطاء (Foot-guns)؟
حسنًا، يرجى ملاحظة أنه إذا قمت _أولاً_ بتنظيف HTML ثم قمت بتعديله _بعد ذلك_، فقد تُبطل بسهولة **تأثير التنظيف**. إذا قمت بتمرير الترميز المُنظّف إلى مكتبة أخرى _بعد_ التنظيف، فتأكد من أن المكتبة لا تعبث بـ HTML من تلقاء نفسها. راجع [أهداف الأمان ونموذج التهديدات](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model) للحصول على وصفات الاستخدام الآمن والوسوم والخصائص التي تستحق التفكير فيها مرتين، و[فئات الهجمات وتاريخ التحايل](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History) لمعرفة لماذا تؤدي المعالجة اللاحقة وتغيير سياق الترميز إلى إبطال التنظيف.
### حسنًا، هذا منطقي، لننتقل إلى الأمام
بعد تنظيف الترميز الخاص بك، يمكنك أيضًا إلقاء نظرة على الخاصية `DOMPurify.removed` ومعرفة العناصر والخصائص التي تم التخلص منها. يرجى **عدم استخدام** هذه الخاصية لاتخاذ أي قرارات حساسة أمنيًا. هذه مجرد أداة مساعدة صغيرة للعقول الفضولية.
### تشغيل DOMPurify على الخادم
يعمل DOMPurify تقنيًا أيضًا على جانب الخادم باستخدام Node.js. يهدف دعمنا إلى اتباع [دورة إصدارات Node.js](https://nodejs.org/en/about/previous-releases).
يتطلب تشغيل DOMPurify على الخادم وجود DOM، وهذا ليس مفاجئًا على الأرجح. عادةً، تُعد [jsdom](https://github.com/jsdom/jsdom) الأداة المفضلة ونحن **نوصي بشدة** باستخدام أحدث إصدار من _jsdom_.
لماذا؟ لأن الإصدارات الأقدم من _jsdom_ معروفة بأنها مليئة بالأخطاء بطرق تؤدي إلى XSS _حتى لو_ قام DOMPurify بكل شيء بشكل صحيح 100%. هناك **نواقل هجوم معروفة**، على سبيل المثال، في _jsdom v19.0.0_ تم إصلاحها في _jsdom v20.0.0_ - ونوصي حقًا بإبقاء _jsdom_ محدثًا بسبب ذلك.
يرجى أيضًا الانتباه إلى أن أدوات مثل [happy-dom](https://github.com/capricorn86/happy-dom) موجودة ولكنها **لا تُعتبر آمنة** في هذه المرحلة. الجمع بين DOMPurify و_happy-dom_ غير موصى به حاليًا ومن المرجح أن يؤدي إلى XSS. للحصول على خلفية حول سبب كون DOM الذي تختاره على جانب الخادم جزءًا من قاعدة الحوسبة الموثوقة لديك، راجع [فئات الهجمات وتاريخ التحايل](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History).