FixVibe
Covered by FixVibecritical

SQL Injection: جلوگیری از دسترسی غیرمجاز به پایگاه داده

تزریق SQL (SQLi) یک آسیب پذیری حیاتی است که در آن مهاجمان با پرس و جوهای پایگاه داده برنامه تداخل می کنند. با تزریق دستور SQL مخرب، مهاجمان می‌توانند احراز هویت را دور بزنند، داده‌های حساس مانند رمزهای عبور و جزئیات کارت اعتباری را مشاهده کنند یا حتی سرور اصلی را به خطر بیندازند.

CWE-89

تاثیر SQL Injection

تزریق SQL (SQLi) به مهاجم اجازه می دهد تا در جستارهایی که یک برنامه در پایگاه داده خود [S1] ایجاد می کند، دخالت کند. تأثیر اولیه شامل دسترسی غیرمجاز به داده های حساس مانند رمزهای عبور کاربر، جزئیات کارت اعتباری و اطلاعات شخصی [S1] است.

علاوه بر سرقت اطلاعات، مهاجمان اغلب می توانند سوابق پایگاه داده را اصلاح یا حذف کنند، که منجر به تغییرات مداوم در رفتار برنامه یا از دست دادن داده ها [S1] می شود. در موارد با شدت بالا، SQLi می تواند برای به خطر انداختن زیرساخت های پشتیبان، فعال کردن حملات انکار سرویس یا ارائه یک درب پشتی دائمی به سیستم های سازمان افزایش یابد.

علت اصلی: مدیریت ناامن ورودی

علت اصلی تزریق SQL، خنثی سازی نامناسب عناصر خاص مورد استفاده در دستور SQL [S2] است. این زمانی اتفاق می‌افتد که یک برنامه درخواست‌های SQL را با الحاق ورودی‌های تحت تأثیر خارجی مستقیماً به رشته پرس‌وجو [S1][S2] ایجاد می‌کند.

از آنجا که ورودی به درستی از ساختار پرس و جو جدا نشده است، مفسر پایگاه داده ممکن است بخش هایی از ورودی کاربر را به عنوان کد SQL اجرا کند نه اینکه آن را به عنوان داده تحت اللفظی [S2] تلقی کند. این آسیب‌پذیری می‌تواند در بخش‌های مختلف یک پرس‌وجو، از جمله عبارت‌های SELECT، مقادیر INSERT، یا UPDATE عبارت‌های [S1] آشکار شود.

رفع و کاهش بتن

از کوئری های پارامتری استفاده کنید

موثرترین راه برای جلوگیری از تزریق SQL استفاده از پرس و جوهای پارامتری است که به عنوان دستورات آماده [S1] نیز شناخته می شود. توسعه‌دهندگان باید به‌جای اتصال رشته‌ها از مکانیسم‌های ساختاری استفاده کنند که جداسازی داده‌ها و کد [S2] را اعمال می‌کند.

اصل کمترین امتیاز

برنامه ها باید با استفاده از کمترین امتیازات مورد نیاز برای وظایف خود [S2] به پایگاه داده متصل شوند. یک حساب برنامه کاربردی وب نباید دارای امتیازات مدیریتی باشد و باید به جداول خاص یا عملیات لازم برای عملکرد آن [S2] محدود شود.

اعتبار سنجی و رمزگذاری ورودی

در حالی که جایگزینی برای پارامترسازی نیست، اعتبار ورودی [S2] دفاعی عمیق را ارائه می دهد. برنامه‌ها باید از یک استراتژی خوب شناخته‌شده استفاده کنند و تأیید کند که ورودی با انواع، طول‌ها و قالب‌های مورد انتظار [S2] مطابقت دارد.

چگونه FixVibe آن را آزمایش می کند

FixVibe در حال حاضر تزریق SQL را از طریق ماژول اسکنر دردار active.sqli پوشش می دهد. اسکن‌های فعال فقط پس از تأیید و تأیید مالکیت دامنه اجرا می‌شوند. این بررسی، نقاط پایانی GET با مبدأ یکسان را با پارامترهای پرس و جو می‌خزد، یک پاسخ خط پایه ایجاد می‌کند، به دنبال ناهنجاری‌های بولی خاص SQL می‌گردد، و تنها پس از تأیید زمان‌بندی در طول‌های چند تأخیر، یافته‌ای را گزارش می‌کند. اسکن‌های مخزن همچنین از طریق code.web-app-risk-checklist-backfill، که فراخوان‌های SQL خام ساخته‌شده با درون‌یابی الگو را پرچم‌گذاری می‌کند، به شناسایی زودتر علت اصلی کمک می‌کند.