DOMPurify یه کتابخانه جاوااسکریپت برای پاکسازی HTML، MathML و SVG از کدهای XSS هست. هر جا قراره محتوایی رو که کاربر یا یه منبع بیرونی نوشته توی صفحه نشون بدی، با DOMPurify تمیزش می کنی تا اسکریپت و ویژگی های خطرناک بیرون بمونن. هم توی مرورگر کار می کنه، هم توی Node.js با jsdom.
نسخه رسمی و بدون تغییر، از منبع رسمی با مجوز (MPL-2.0 OR Apache-2.0)؛ هش هر فایل با منبع بررسی شده است.
فرض کن سایتت بخش دیدگاه داره، یا یه سیستم تیکت که کاربرها توش متن فرمت دار می فرستن. اگه اون متن رو همون طور که اومده با innerHTML توی صفحه بذاری، کافیه یه نفر یه تگ تصویر با رویداد onerror بفرسته تا اسکریپتش توی مرورگر بقیه اجرا بشه. اسمش XSS هست و هنوز یکی از رایج ترین راه های نفوذ به سایت هاست. DOMPurify دقیقا برای همین جلوی کار رو می گیره.
کارش اینه که رشته HTML رو می گیره، توی یه DOM امن پارسش می کنه و هر چیز خطرناکی رو بیرون می ریزه: تگ script، ویژگی های رویدادی مثل onclick و onerror و آدرس های javascript:. بقیه محتوا، یعنی پاراگراف، لینک، جدول، تصویر و حتی SVG و MathML سالم، دست نخورده می مونه. به همین خاطر بهش می گن «tolerant»، یعنی ظاهر محتوای عادی رو خراب نمی کنه. سازنده اش Mario Heiderich و تیم Cure53 هستن که کارشون امنیت وبه.
کجا به کارت میاد؟ هر جایی که یه رشته HTML از یه منبع غیرقابل اعتماد داری: خروجی ویرایشگرهای متنی، دیدگاه ها، پیام های چت، محتوایی که از API می گیری و توی صفحه نشون می دی، یا پیش نمایش ایمیل و قالب. توی Node.js هم با jsdom کار می کنه، پس می شه پاکسازی رو سمت سرور یا توی تست ها هم انجام داد. ولی جای همه چیز رو نمی گیره. اگه فقط می خوای یه متن ساده نشون بدی، textContent یا escape معمولی ساده تره و اصلا لازم نیست HTML رو باز کنی. ولیدیشن سمت سرور هم سر جاش لازمه، چون DOMPurify فقط یه لایه دفاعیه، نه تنها لایه.
چند نکته موقع استفاده. پاکسازی رو درست قبل از قرار دادن توی DOM انجام بده، نه خیلی زودتر، و بعدش رشته رو دستکاری نکن، چون ممکنه امن بودنش از بین بره. تنظیم هایی مثل ALLOWED_TAGS و ALLOWED_ATTR اجازه می دن لیست مجاز رو تنگ تر کنی، ولی هر چی بازترش کنی ریسک بیشتر می شه. پس با پیش فرض ها شروع کن. این کتابخانه مرتب از نظر امنیتی بررسی می شه و گاهی راه های دور زدنش پیدا و رفع شده، برای همین بهتره نسخه رو به روز نگه داری. نسخه های رسمی و بدون تغییر DOMPurify توی مخزن داخلی ما هم در دسترسه و وقتی دسترسی به npm و CDN های خارجی قطع یا کند می شه، می تونی از همین جا برش داری.
راهنمای استفاده
قدم های کلی اینه:
فایل رو از همین صفحه بردار و روی هاست خودت بذار. اگه پروژه ات با npm کار می کنه، بسته dompurify رو با npm نصب کن.
کد آماده ای که پایین همین صفحه گذاشتیم رو به صفحه اضافه کن تا کتابخانه قبل از اسکریپت خودت لود بشه. توی قالب یا افزونه وردپرس، اسکریپت رو با wp_enqueue_script ثبت کن.
هر جا قبلا رشته HTML رو مستقیم توی innerHTML می ریختی، اول از تابع DOMPurify.sanitize رد کن و نتیجه رو بذار.
اگه فقط تگ های مشخصی می خوای، گزینه های ALLOWED_TAGS و ALLOWED_ATTR رو بده. اگه نمی خوای SVG یا MathML وارد بشه، از USE_PROFILES با پروفایل html استفاده کن.
توی Node.js اول با jsdom یه window بساز، بعد DOMPurify رو با اون راه بنداز.
بعد از اتصال، یه رشته تست با تگ script و یه تصویر با onerror بده و مطمئن شو خروجی تمیز برمی گرده. این تست چند ثانیه بیشتر وقت نمی بره و جلوی کلی دردسر رو می گیره.
نشانی مستقیم فایل اصلی 2.2.3https://mirror.wbweb.ir/npm/dompurify@2.2.3/dist/purify.min.js
پرسشهای رایج
یه کتابخانه جاوااسکریپت برای پاکسازی HTML، SVG و MathML از کدهای مخرب XSS هست. وقتی محتوایی از کاربر یا منبع بیرونی داری و می خوای با HTML توی صفحه نشونش بدی، DOMPurify اسکریپت ها و ویژگی های خطرناک رو حذف می کنه و بقیه محتوای سالم رو سر جاش نگه می داره.
نه. DOMPurify یه لایه دفاعی موقع نمایش و پردازش HTML هست، ولی ورودی کاربر باید سمت سرور هم بررسی و فیلتر بشه. هر دو لایه رو داشته باش. اگه فقط متن ساده نشون می دی، escape معمولی یا textContent کافیه و نیازی به باز کردن HTML نیست.
آره، با jsdom کار می کنه. DOMPurify به یه DOM نیاز داره و Node.js خودش نداره، پس اول با jsdom یه window می سازی و DOMPurify رو باهاش راه می ندازی. این روش برای پاکسازی سمت سرور، رندر قالب و نوشتن تست هم به کار میاد.
وردپرس سمت سرور توابع پاکسازی خودش رو داره، مثل wp_kses. ولی وقتی افزونه یا قالبت HTML رو توی مرورگر با جاوااسکریپت می سازه، مثلا از یه API یا یه فرم زنده، اون توابع وارد کار نمی شن. اونجا یه پاک کننده سمت مرورگر مثل DOMPurify به کارت میاد.
آره. با گزینه هایی مثل ALLOWED_TAGS و ALLOWED_ATTR لیست مجاز رو خودت تعیین می کنی و با گزینه های FORBID هم می شه چیزهای مشخصی رو ممنوع کرد. بهتره با تنظیم پیش فرض شروع کنی و فقط وقتی واقعا لازم شد لیست رو تغییر بدی.
prebid-universal-creative یه بسته جاوااسکریپتیه که تبلیغ برنده رو توی سایت هایی با Prebid و هدر بیدینگ نشون می ده. این کد توی کریتیو اد سرور قرار می گیره و بعد از تموم شدن مزایده، تبلیغ رو توی جایگاه نشون می ده. مجوزش Apache هست و نسخه رسمی ش توی مخزن ما موجوده.
workbox-cdn یه بسته آماده از کتابخونه Workbox گوگله که بدون ابزار build و فقط با بارگذاری یه اسکریپت می تونی توی سایتت استفاده کنی. با Workbox سرویس ورکر رو راحت تر می نویسی، کش و حالت آفلاین رو مدیریت می کنی و بازدیدهای بعدی سایتت سریع تر باز می شن.
mathjax یه کتابخانه متن باز جاوااسکریپته که فرمول های ریاضی رو توی مرورگر نمایش می ده. فرمولی که با LaTeX، MathML یا AsciiMath نوشتی رو به متن تیز، قابل انتخاب و قابل دسترس تبدیل می کنه، پس لازم نیست از فرمول ها عکس بگیری. مجوزش Apache هست و بسته npm هم داره.
sweetalert2 یه کتابخانه جاوااسکریپته که به جای پنجره های پیش فرض مرورگر، یعنی alert و confirm و prompt، پنجره های پیام، تایید و ورودی تمیز و ریسپانسیو نشون می ده. ظاهرش قابل تنظیمه و طبق معرفی رسمی از دسترس پذیری WAI-ARIA پشتیبانی می کنه. سازنده اش Limon Monte و مجوزش MIT هست.
search-insights یه کتابخانه جاوااسکریپت از Algolia با مجوز MIT هست که کلیک، تبدیل و بازدید کاربرها روی نتیجه های جستجو رو به Insights API خود Algolia گزارش می ده. اگه جستجوی سایتت با Algolia کار می کنه، با این بسته می تونی رفتار کاربرها رو ثبت کنی و کیفیت جستجو رو بهتر کنی.
js-cookie یه کتابخانه جاوااسکریپت ساده و خیلی سبکه که کار با کوکی های مرورگر رو راحت می کنه. با چند تا متد کوتاه می تونی کوکی بسازی، بخونی و پاک کنی و لازم نیست با رشته خام document.cookie سروکله بزنی. مجوزش MIT هست و به کتابخانه دیگه ای وابسته نیست.
آخرین نسخه
۳.۰.۸
نسخهها
۸
بهروزرسانی
چیزی که لازم دارید اینجا نیست؟
نام کتابخانه، افزونه یا قالب را بفرستید؛ پس از بررسی، نسخههای رسمی آن به مخزن اضافه میشود.