پایگاه دانش

حملات SQL injection چیست؟

یکی از رایج ترین روش های نفوذ به پایگاه داده است که معمولا از طریق صفحات وب اتفاق می افتد. این تکنیک دست نفوذ گران را برای انجام هر کاری باز نمی کند و بیشتر در به کار انداختن یا حذف کردن پایگاه داده کاربرد دارد.

کارکرد SQL injection چگونه است؟

در این روش پر تکرار هکر مانند سایر کاربران وارد پلتفرم می شود، او از طریق فیلد های ورود داده مانند کادر جست و جو کد مخربی را وارد پایگاه داده می کند.

اگر دیتا بیس شما SQL باشد کد های وارد شده مخرب می توانند وارد پایگاه داده شوند و DBMS آنها را به عنوان کد دستوری تشخیص می دهد نه به عنوان مقادیر ورودی. به عنوان مثال شما عبارت “لیوان” را جست و جو می کردید پایگاه داده می رفت و نتایج مربوط به آنرا نمایش می داد. حالا شما اگر دستور همه اطلاعات را پاک کن را به زبان SQL بنویسید دیگر نتایج خاصی را جست وجو نمی کند بلکه همه داده هارا حدف میکند!

search bar

انواع حملات SQL injection

SQL injection در باند

هکر از کانال ارتباطی که کشف کرده برای جمع آوری اطلاعات استفاده میکند، که دو نوع دارد.

Error-based SQL injection:

در این حمله پایگاه داده پیغام خطا تولید می‌کند و این پیغام‌ها اطلاعات مورد نیاز درمورد ساختار نوع و نسخه پایگاه داده را جمع‌آوری می‌کند.

Union-based SQL injection:

در این روش با استفاده از اپراتور UNION SQL چندین دستور انتخابی (select) که پایگاه داده تولید کرده ترکیب می‌شوند تا یک پاسخ HTTP به‌دست آید. این پاسخ احتمالا حاوی داده‌های موردنظر مهاجم است.

SQL injection استنتاجی

در این حمله داده ای از دیتابیس به مهاجم منتقل نمی شود، بلکه مهاجم با ارسال دستورات خود و دیدن تغییر رفتار سرور یا کاهش سرعت آن بیشتر متوجه نوع و کارکرد درخواست ارسالی خود و کارکرد پایگاه داده بشود. این نوع حمله هم خود دو نوع است.

حملات Boolean:

در این نوع حملات هکر چند کوئری  SQL به سرور ارسال می کند. نتیجه آن بستگی به درست بود یا نبودن پاسخ HTTP سرور تغییر می کند. در نهایت مهاجم می‌تواند ببیند که آیا پیام ارسالی نتیجه درست یا نادرستی ایجاد کرده است.

حملات Time-based:

در این حملات مهاجم یک کوئری به دیتابیس می‌فرستد تا آن را برای چند ثانیه در حالت انتظار نگه دارد. سپس با توجه به زمان پاسخ دیتابیس، درست یا نادرست بودن کوئری را نتیجه می‌گیرد.

SQL injection خارج از باند

اکثر هکرها دنبال نمونه‌های SQL injection آسیب‌پذیری‌های blind یا کور هستند. یعنی اپلیکیشن نتایج پرس‌وجوهای SQL  یا هر داده مربوط به خطای پایگاه ‌داده را در داخل پاسخ‌ها برنمی‌گرداند بلکه آن می‌تواند باعث سوءاستفاده از اطلاعات پایگاه داده شود اما برای پیاده ‌سازی آن نیاز به اجرای تکنیک ‌های پیچیده و دشواری است.

چگونه می توان از حملات SQL injection جلوگیری کرد؟

اعمال محدودیت برای ورود داده به کاربران

کابران اگر کلمات کلیدی sql را وارد کردند سرور آنها را به مرحله اجرا نرساند و به کاربر نتیجه از پیش تعیین شده نشان دهد، مثلا برای جست و جوی شما نتیجه ای یافت نشد.

همچنیت برخی کاراکتر های خاص که شامل ” # – & * و… می شوند را در صورت دریافت از کاربر در SQL خود اجرا نکنید.

از SQL پویا تا حد ممکن استفاده نکنید

به جای آن که داده های کاربر را مستقیما وارد کد SQL خود کنید. آنها را به صورت پارامتر دریافت کنید و از SQL های آماده و از پیش تعریف شده برای اجرای درخواست استفاده کنید، مثلا کاربر نوع زنانه یا مردانه بودن کالای خود را مستقیما جست و جو نکند؛ بلکه آنرا به عنوان فیلتر کالا ها تعیین کند.

داده های حساس را رمز نگاری کنید

همه اطلاعات مهم شما از طریق این حملات اگر دزدیده شوند در صورت رمز نگاری بودن استفاده از آنها توسط مهاجم غیر ممکن است. تفاوتی هم ندارد که رمزنگاری دو طرفه باشد یا یک طرفه.

عدم نمایش مستقیم خطا های پایگاه داده

همان طور که اشاره شد با استفاده از خطاهای دیتابیس می توانند اطلاعات کاملی در رابطه با آن به دست آورند. شما می توانید متن خطا ها را تغییر دهید که با استفاده از آنها چیزی درباره دیتابیس شما لو نرود. یا با استفاده از FireWall از عبور داده های حاوی خطا جلو گیری کنید.

استفاده از به روز ترین نسخه پایگاه داده

قطعا اگر از نسخه جدیدتر پایگاه داده خود استفاده کنید کارایی و امنیت بیشتری دریافت خواهید کرد.

پایگاه داده را خودتان تست کنید

با استفاده از نرم افزار هایی مانند web vulnerability scanner نقاط ضعف پایگاه داده خود را تست کنید تا آنها را رفع کنید.

کد هایی که فکر می کنید میتوانند مخرب باشند را خودتان اجرا کنید تا از آنها مطمئن شوید.

موارد اخیر

برترین ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *