ماژولهای پردازش XML¶
کد منبع: Lib/xml/
رابطهای پایتون برای پردازش XML در بسته xml گروهبندی شدهاند.
توجه
اگر نیاز دارید دادههای غیرقابلاعتماد یا تأییدنشده را تجزیه کنید، امنیت XML را ببینید.
مهم است توجه داشته باشید که ماژولهای موجود در بستهی xml نیاز دارند که حداقل یک پارسر XML سازگار با SAX در دسترس باشد. پارسر Expat همراه با پایتون گنجانده شده است، بنابراین ماژول xml.parsers.expat همیشه در دسترس خواهد بود.
مستندات بستههای xml.dom و xml.sax تعریف اتصالات پایتون برای رابطهای DOM و SAX است.
زیرماژولهای پردازش XML عبارتند از:
xml.etree.ElementTree: API ElementTree، یک پردازشگر XML ساده و سبک
xml.dom: تعریف API DOMxml.dom.minidom: یک پیادهسازی کمینه از DOMxml.dom.pulldom: پشتیبانی از ساخت درختهای DOM جزئی
xml.sax: کلاسهای پایه SAX2 و توابع کمکیxml.parsers.expat: اتصال پارسرٔ Expat
امنیت XML¶
یک مهاجم میتواند هنگامی که XML تحت کنترل مهاجم، در پایتون یا جاهای دیگر در حال تجزیه است، از قابلیتهای XML سوءاستفاده کند تا حملات محرومسازی از سرویس انجام دهد، به پروندههای محلی دسترسی یابد، اتصالات شبکهای به ماشینهای دیگر ایجاد کند یا فایروالها را دور بزند.
پارسرهای توکار XML در پایتون برای تجزیه XML به کتابخانه libexpat، که معمولاً Expat نامیده میشود، متکی هستند.
بهطور پیشفرض، خود Expat به پروندههای محلی دسترسی ندارد و اتصالات شبکه ایجاد نمیکند.
نسخههای Expat پایینتر از 2.7.2 ممکن است در برابر آسیبپذیریهای «billion laughs»، «quadratic blowup» و «large tokens» یا استفادهی نامتناسب از حافظهی پویا آسیبپذیر باشند. پایتون یک کپی از Expat را بههمراه دارد و اینکه پایتون از نسخهی همراهشدهی Expat استفاده کند یا یک نسخهی سراسری Expat در سیستم، بستگی به این دارد که مفسر پایتون در محیط شما چگونه پیکربندی شده است. ممکن است پایتون در صورت استفاده از چنین نسخههای قدیمیتری از Expat آسیبپذیر باشد. pyexpat.EXPAT_VERSION را بررسی کنید.
xmlrpc در برابر حملهی «بمب رفع فشردگی» (decompression bomb) آسیبپذیر است.
- خندههای میلیاردی (billion laughs) / بسط نمایی موجودیت (exponential entity expansion)
حملهی Billion Laughs -- که با نام انبساط نمایی موجودیت نیز شناخته میشود -- از سطوح متعددی از موجودیتهای تودرتو استفاده میکند. هر موجودیت چندین بار به موجودیت دیگری ارجاع میدهد، و تعریف موجودیت نهایی شامل یک رشتهی کوچک است. انبساط نمایی به چندین گیگابایت متن منجر میشود و مقدار زیادی حافظه و زمان CPU را مصرف میکند.
- بسط موجودیت با رشد تواندومی (quadratic blowup entity expansion)
حملهی انفجار مربعی (quadratic blowup) شبیه به حملهی Billion Laughs است؛ این حمله نیز از گسترش موجودیت سوءاستفاده میکند. بهجای موجودیتهای تودرتو، یک موجودیت بزرگ با چند هزار نویسه را بارها و بارها تکرار میکند. این حمله به اندازهی حالت نمایی کارآمد نیست، اما از فعال شدن پادکارهای پارسر که موجودیتهای تودرتوی عمیق را ممنوع میکنند، جلوگیری میکند.
- بمب واگشایی (decompression bomb)
بمبهای واگشایی (که به ZIP bomb نیز شناخته میشوند) در مورد تمام کتابخانههای XML که میتوانند جریانهای XML فشردهشده، مانند جریانهای HTTP فشردهشده با gzip یا پروندههای فشردهشده با LZMA را تجزیه کنند، صدق میکنند. برای یک مهاجم، این میتواند مقدار دادهی انتقالیافته را به اندازه ۳ مرتبه بزرگی یا بیشتر کاهش دهد.
- توکنهای بزرگ
Expat نیاز دارد توکنهای ناتمام را دوباره تجزیه کند؛ بدون محافظت معرفیشده در Expat 2.6.0، این موضوع میتواند منجر به رانتایم درجهدویی شود که میتوان از آن برای ایجاد ممانعت از سرویس در برنامهای که XML را تجزیه میکند، استفاده کرد. این مشکل بهعنوان CVE 2023-52425 شناخته میشود.