زمانی که صحبت از اینترنت می شود ، هک شدن سایت ها و اطلاعات کاربران از مهم ترین بحث هایی است که به میان می آید.در این مقاله به توضیح حمله SQL Injection و راه های مقابله با آن می پردازیم.
در حمله ی SQL Injection یاهمان SQL فرد مهاجم سعی میکند با ارسال کردن کدهای مختلف برای پایگاه داده به سایت و اطلاعات کاربران دسترسی پیدا کند و یا آنها را حذف کند و باعث تغییرات در آنها شود. صفحه های لاگین از جمله مواردی می باشند که هدف های خوبی برای اجرای حمله ی SQL Injection هستند.
حمله ی SQL Injection به صورتی است که فهرستی از دستورات و کوئرهای مختلف برای پایگاه داده تهیه شده، و از قسمتی که هکرها فکر میکنند امکان دارد کدهایی که از آنجا وارد می شود بر روی پایگاه داده پردازش شوند به سایت تزریق می شود.اجرای حمله ی SQL Injection بر روی پایگاه داده های غیررابطه ای نیز ممکن است .
حمله ی SQL Injection به طور دقیق به معنی تزریق کد SQL نمی باشد بلکه هدف ترزیق کوئرهایی است که اطلاعاتی را از پایگاه داده بدست بیاورند. تشخیص و جلوگیری کردن از این حمله ها کار ساده ای نمی باشد و پایگاه داده کوئری را که به آن برسد برسی و اجرا میکند و حتی ممکن است کوئری ها خروجی نداشته باشند و به دنبال حذف پایگاه داده باشند.
چهار روش برای حمله ی SQL Injection وجود و امکان ترکیب این چهار روش نیز باهم وحود دارد.
به طور کل SQL از سه قسمت کوئری تشکیل شده که قسمت اول باSelect شروع میشود و قسمتی که میخواهیم برگردانده شود و نشان داده شود را انتخاب می کنیم.
قسمت دوم نشان دهنده ی جدولی می باشد که از آن استفاده کرده و داده ها را از آن دریافت میکنیم و در آخر هم قسمت سوم که شرط دستور است که باWhere جدا می شود و شرط ما مورد برسی قرار میگیرد.
ساختار کلی این دستور به این صورت است:
SELECT column1, column2 , column3 , …
FROM table_name
WHERE condition;
در قسمت اول و دوم ستون 1 و 2 و 3 معرفی شده است و در قسمت دوم اسم جدول مورد نظر ما قرار میگیرد و در قسمت سوم شرط ها قرار دارند و Condition ها میتواند به طور همزمان برروی چند جدول به اجرا دربیاید.
این دستور کارایی مهمی دارد و اگر برنامه نویس به آن توجه نکند سیستم دارای آسیب های زیادی میشود . یکی از از بی دقتی های مربوط به این بخش عبارت است از:
1. فیلترهای اشتباه در بخش Where
قسمت Condition یکی از قسمت هایی است که میتوان از آن به دلیل متغیر بودنش سواستفاده کرد به صورتی که به جای داده ورودای که توسط این بخش چک میشود یک کوئری وارد می شود و از روش های مختلفی برای اجرایی کردن این کد استفاده می شود.
اگر در این قسمت توجه لازم نشود امکان دارد کدی وارد شود که تعدادی از جدول ها را تخریب کند و آنها را به نمایش دربیاورد.
2.ورودی کنترل نشده
این مورد بسیار خطرناک است اگر ورودی ها از لحظ نوعی که دارند کنترل نشده باشند.
در این روش کدهای مخرب کننده را در محل ورود داده ها وارد و با زدن اینتر پارامترها ارسال میشوند و کد مخرب نیز ارسال میشود.
3.تزریق به صورت Blind Attack
یکی از پرکاربردترین نوع این حمله BLind Attack یا همان روش کور است.
در روش کور زمانی که قسمتی برای ورود کد پیدا شود بدون آنکه نتیجه ی تخریب به هکر نشان داده شود کوئری های مختلفی به سایت فرستاده می شوند. امکان دارد تعداد زیادی از این کوئری ها توسط ماژول ها اجرا نشوند اما در عین حال امکان دارد یکی از آنها عمل کرده و پایگاه داده سایت به مشکل بربخورد.
4.تغییر مقادیر شرطی
تغییر شرط های برسی شده که به پایگاه داده ارسال می شود یکی دیگر از موردهای حمله SQL Injection است. اگر به URL هایی که کوئری هایی که کوئری های خود را دارند توجه کرده باشیم موارد مختلفی را اجرا میکنند که میتواند شامل کدهایی مثل NAME , ID باشند که به فایل PHP خاصی ارسال و مورد پردازش قرار می گیرد.
امتحان مقادیر مختلف در URL ها میتواند منجر به نتیجه های مختلف برای این عمل باشد.
در ابتدا سایت ما باید دارای امنیت بالایی باشد که فقط کوئری های درست را به پایگاه داده ارسال کند و هیچ قسمتی برای حمله وجود نداشته باشد و امنیت را برقرار کند.
همچنین باید طراحی را به گونه ای انجام دهیم که پایگاه داده تشخیص بدهد که چه دستورهایی را اجرا و چه دستورهایی را اجرا نکند.
برخی از روش های جلوگیری کردن از حمله SQL Injection عبارت از:
1.نصب پچ ها و آپدیت امنیتی
زمانی که پیام آپدیت سیستم برای ما ارسال میشود بهتر است همان موقع آپدیت را انجام بدهیم زیرا ممکن است باگ هایی که برروی سایت ها وجود داشته باعث ایجاد این حمله ها شود و با نصب آپدیت ها امنیت سایت را در مقابل حمله SQL Injection بالا میبریم.
2.دقت کردن به ارورها
یکی دیگر از روش ها ارورهایی است که پایگاه داده به ما بازمی گرداند زیر متوجه دستورات بی معنی شده و خطاهایی را مبنی بر دستورات ناقص باز میگرداند که می تواند نشان دهد حمله SQL Injectionدر حال اجراست. این نوع حمله با پیدا کردن نقطه ضعف انجام میشود و راه جلوگیری از آن این است که از سیستم هایی استفاده کنیم که هیچ راه ورود و نفودی ندارد.
3.تنظیم امکانات پایگاه داده برای برخورد
پایگاه داده با کوئری های ناشناخته یکی دیگر از مواردی است که میتواند به ما کمک کرده تا از حملهSQL Injection جلوگیری کنیم.
پایگاه داده ها می تواند با دیدن کوئری های ناشناخته و عجیب که از مکان های ناشناخته ای ارسال شده واکنش نشان داده و آن کاربر را به عنوان مخرب کننده بن کند و دسترسی آن فرد به سایت قطع شود. این روش برای جلوگیری از حمله بسیار کمک میکند.
این حمله از آن جایی که پایگاه داده را درگیر میکند باعث ایجاد صدمات زیادی به سایت می شود و بهتر است قبل از حمله SQL Injection برای مقابله کردن با آن آماده شویم.
گرد آورنده: مائده نادرلو
درس پایگاه داده
استاد: دکتر مریم حاجی اسمعیلی. دکترای علوم کامپیوتر از دانشگاه کینگستون لندن
Dr.Maryam Hajiesmaeili
PhD of computer science from Kingston University of London
https://momtazserver.com