TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #90 108
#security #bug
دسته بندی Injection Attacks

باگ XML External Entity (XXE) Injection یک نوع باگ امنیتی است که در برنامه‌ها و سیستم‌هایی که با فرمت XML کار می‌کنند، رخ می‌دهد. در این حمله، حمله‌کننده با درج موجودیت‌های خارجی (External Entity) در فایل‌های XML، توانایی اجرای کدها و دستورات سیستمی را به طور غیرمجاز به برنامه می‌دهد. این کار می‌تواند منجر به دسترسی به فایل‌ها و منابع حساس، اجرای دستورات سیستمی، یا نقض حریم خصوصی وب‌سرویس‌ها شود.

مثال:

فرض کنید یک وب‌سرویس با فرمت XML برای پردازش درخواست‌ها ایجاد شده است. درخواست‌ها از کلاینت‌ها به صورت یک فایل XML ارسال می‌شوند و سپس وب‌سرویس اطلاعات مورد نیاز را از فایل XML استخراج می‌کند. کد PHP وب‌سرویس به صورت زیر است:
$xml = $_POST['xml'];
$dom = new DOMDocument();
$dom->loadXML($xml);
$data = simplexml_import_dom($dom);

$username = $data->username;
$password = $data->password;
// ...

حمله‌کننده می‌تواند در فایل XML خود موجودیت‌های خارجی (External Entity) را درج کند و از طریق آن‌ها تلاش کند به فایل‌های سرور دسترسی پیدا کند. به عنوان مثال:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<user>
<username>&xxe;</username>
<password>malicious_password</password>
</user>

وقتی وب‌سرویس این فایل XML را پردازش می‌کند، موجودیت‌های خارجی باعث می‌شود که محتوای فایل /etc/passwd (که شامل اطلاعات حساب‌های کاربری سیستم است) به جای &xxe; در فیلد username قرار گیرد. در نتیجه، محتوای فایل /etc/passwd به عنوان نام کاربری دریافت می‌شود و این اطلاعات محرمانه نمایش داده می‌شود.

روش های جلوگیری:

1- تعیین پارامتر LIBXML_NOENT در زمان پردازش XML برای غیرفعال‌سازی خودکار موجودیت‌های خارجی.
libxml_disable_entity_loader(true);

2- به‌جای دریافت XML از ورودی کاربران، بهتر است کاربران فایل XML را آپلود کنند و برنامه از مسیر فایل آپلود شده XML استفاده کند.

3- همانند سایر باگ‌های امنیتی، اعتبارسنجی دقیق ورودی‌ها و فیلتر سازی آن‌ها برای جلوگیری از درج موجودیت‌های خارجی ضروری است.

4- استفاده از کتاب‌خانه‌ها و ابزارهایی که امکان تشخیص و جلوگیری از XXE را فراهم می‌آورند.

.
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →