معرفی روش های مقابله با حملات SQL Injection

معرفی روش های مقابله با حملات SQL Injection
امنیت

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

26 مهر 1400

sql Injection چیست؟

حمله SQL Injection یک نوع  است و به مهاجم امکان اجرای دستورات مخرب SQL را می دهد تا اطلاعاتی که برای او قابل مشاهده نیست را بازیابی کند. این اطلاعات می تواند اطلاعات مشتری، اطلاعات شخصی ، اسرار تجاری و غیره باشند. هکر می تواند این اطلاعات را حذف یا تغییر دهد. شخص نفوذگر می تواند رکورد های پایگاه داده شما را حذف کند و وب سایت وردپرس شما را دست کاری کند. از این جهت امنیت پایگاه داده در وردپرس برای هر کسب و کاری اهمیت دارد. در برخی موارد هکر می تواند این حمله را در مقیاس بزرگتری انجام دهد تا به سرور اصلی و به سایر زیر ساخت های بک اند حمله کند. در مقالات قبلی درباره حملات DDos، حملات Brute Force و حملات XSS و راه های مقابله با آن ها صحبت کردیم. در این مقاله قصد داریم به روش های جلوگیری از حملات SQL Injection بپردازیم.

عملکرد SQL Injection در وردپرس

فیلدهای ورودی یک سایت مرکز حملات injection هستند. برای مثال فرم های ورود، فرم های ثبت نام، فرم های تماس، جست و جوی سایت، فیلدهای فیدبک و سبد خرید.

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

دلیل رواج حملات SQL Injection

در این بخش به علل فراگیر شدن SQL Injection در وردپرس می پردازیم.

  • اکثر پایگاه داده ها بر مبنای SQL هستند.
  • وردپرس پرکاربردترین  CMS از SQL استفاده می کند.
  • تقریبا همه سایت ها دارای فیلدهای ورودی مانند فرم ها هستند.
  • کاربر گسترده و دسترسی راحت به ابزارهای SQL Injection
  • عدم نیاز به دانش فنی برای استفاده از آن

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

در این بخش به معرفی انواع حملات تزریق SQL می پردازیم.

1- Inferential/Blind SQL Injection

ایجاد کوئری های متعدد یک خطا در کوئری SQL و سپس نتایج را تجزیه و تحلیل کند. این حملات به دلیل اینکه بر اساس حدس هکر هستند به حملات کور شناخته می شوند.

  • Boolean Blind SQL Injection

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

  • Time-Based Attack

این حمله برای بررسی آسیب پذیری دیتابیس استفاده می شود. یک کوئری شامل تابع زمان توسط مهاجم ایجاد می شود. برای مثال تابع () sleep در mysql که به پایگاه داده فرمان می دهد تا چند ثانیه منتظر بماند. اگر نتیجه کوئری با تاخیر باشد نشان می دهد که دیتابیس در برابر حمله آسیب پذیر است.

2-  In-Band SQL Injection

از ساده ترین حمله ها هستند که مهاجم از همان کانالی که برای ورود کدهای sql مخرب استفاده کرده برای دریافت نتایج استفاده می کند.

  • Error-Based SQL Injection

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

  • Union Based Attack

این حمله از دستور UNION ،SQL برای ترکیب درخواست های خود استفاده می کند. این حمله به هکر کمک می کند که داده ها را از جداول متعددی به طور همزمان استخراج کند.

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

روش های شناسایی و مقابله با حملات SQL Injection

چنانچه سایت شما با حملات تزریق SQL شده است. در  این بخش به شما نحوه روش های شناسایی SQL Injection را آموزش می دهیم.

1- استفاده از اسکنرهای آسیب پذیر مانند WPScan یا ThreatPass

این پلاگین ها باید به صورت دوره ای از نظر عملکرد بررسی شوند.

2- کنترل آسیب

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

3- پاکسازی فایل های UDF

یکی دیگر از راه های جلوگیری از حملات SQL Injection این است که فایل های UDF که مهاجمان از آنها برای حمله استفاده می کنند را پاکسازی کنید.

4- گرفتن بک آپ به صورت دوره ای

از سایت خود بک آپ های دوره ای داشته باشید و آن را در جای امن نگه دارید.

5- پاکسازی پایگاه داده

1- همه جداول خود را با استفاده از دستور نمایش جداول جست و جو کنید و به دنبال جدولی به نام Sqlmap باشید.

show tables;

2- اگر جدول Sqlmap  را پیدا کردید نشان می دهد که برای مقابله با وب سایت شما ایجاد شده است. با استفاده از دستور زیر آن را حذف کنید.

DROP TABLE Sqlmap

3- با کد زیر به دنبال کاربران جدید یا غریبه در دیتابیس خود باشید.

Select * FROM users AS u AND u.created > UNIX_TIMESTAMP(STR_TO_DATE(‘sept 22 2020’, ‘%M %d %Y ‘));

4- همه کاربران متقلب را با استفاده از دستور زیر حذف کنید.

DROP USER ‘malicious’@’localhost’;

5- رمزهای عبور خود را با استفاده از دستور زیر تغییر دهید.

UPDATE users SET pass = concat(‘ZZZ’, sha(concat(pass, md5(rand()))));

6- اجرای حملات شبیه سازی شده

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

علاوه بر مواردی که برای شناسایی حملات SQL Injection ذکر شد، این نکات نیز اهمیت دارند:  اگر پورت 3306 شما باز است آن را مسدود کنید، دسترسی کاربران دیتابیس را به بخش های ساس محدود کنید، پسورد رمزنگاری شده خود را نیرومندتر کنید.

روش های شناسایی حملات sql injection

”choosearea”

جلوگیری از حملات SQL Injection

قبل از اینکه حمله اتفاق افتد باید از آن جلوگیری کنید. در این بخش به راه های مقابله با حملات sql injection می پردازیم.

1- محدود کردن استفاده از فرم های ورود

تا حد امکان استفاده از فرم های ورودی مانند پاپ آپ های اشتراک را به حداقل برسانید.

2- استفاده از تم ها و افزونه های امن و معتبر

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

3- نسخه وردپرس خود را پنهان کنید

یکی از راه هایی که می توانید سایت خود را از نفوذ حفظ کنید این است که نسخه وردپرس خودتان را با استفاده از کد زیر مخفی کنید.

remove_action(‘wp_head’, ‘wp_generator’);

4- امتیازات کاربر پایگاه داده را به حداقل برسانید

به کاربران دیتابیس خود امتیازات اضافه ندهید. تغییراتی که آنها می توانند روی سایت شما بدهند باید به شیوه ای باشد که تنها بتوانند وظایف خود را انجام بدهند.

نکته: هرگز اطلاعات کاربر اصلی (همه دسترسی ها را دارد) را برای دسترسی به پایگاه داده به سایر کاربران ارائه ندهید.

5- اطلاعات ارسال شده کاربران را بررسی و تایید کنید

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

با استفاده از زبان برنامه نویسی php اطلاعات ارسالی کاربران را کنترل کنید.

برای مثال برای اعداد کد زیر به کار می رود.

ctype_digit()

کد زیر برای رشته های متنی استفاده می شود.

ctype_alpha()

6- مقادیر کوئری های خود را محدود کنید

در کد های سایت خود مقادیر کوئری های خودتان را داخل تک کوتیشن قرار دهید. برای مثال فرمت اول نسبت به فرمت دوم بیشتر در معرض هک و نفوذ است.

SELECT name FROM users WHERE id_user = $ id

SELECT name FROM users WHERE id_user = ‘$ id’

7- اجتناب از استفاده از کاراکترهای خاص در کدها

یکی دیگر از راه های جلوگیری از SQL Injection در وردپرس این است که در کوئری ها از کاراکترهای خاص مانند (“)، (‘)، x00 ، \x1a\ استفاده نکنید. این کاراکترها پر خطر هستند و می توانند در طول حمله استفاده شوند. بهتر است یک کد جایگزین برای آنها در نظر بگیرید.

8- آپدیت وردپرس و افزونه ها

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

9- استفاده از فایروال

وجود یک فایروال سایت شما را در برابر SQL Injection و سایر حملات محافظت می کند. چند نمونه فایروال وردپرس itheme security، wordfence، all in one WP security و غیره هستند. به علاوه  از هاست خود بپرسید که چه امکانات و راه حل ها امنیتی برای وب سایت شما دارد.

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

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

محافظت از سایت خود در برابر حملات sql injection با افزونه های امنیت
دیدگاه ها افزودن دیدگاه
دیدگاهی برای این مطلب ثبت نشده است.