SQL Injection (SQLi) یک نوع حمله سایبری است که به مهاجم اجازه میدهد کدهای مخرب SQL را به یک وبسایت یا برنامه تزریق کند. این حمله زمانی رخ میدهد که ورودی کاربر به درستی بررسی و فیلتر نشود و به صورت مستقیم در کوئریهای (پرسوجوهای) پایگاه داده قرار گیرد.
SQL Injection چطور کار میکند؟
تصور کنید یک فرم ورود به سایت دارید که از شما نام کاربری و رمز عبور میخواهد. یک برنامه آسیبپذیر، این اطلاعات را به صورت مستقیم در یک کوئری SQL قرار میدهد:
SELECT * FROM users WHERE username = ‘ورودی_کاربر’ AND password = ‘ورودی_رمز_عبور’;
یک مهاجم به جای رمز عبور عادی، عبارتی مثل ‘ OR ‘1’=’1 را وارد میکند. کوئری نهایی به شکل زیر درمیآید:
SELECT * FROM users WHERE username = ‘ورودی_کاربر’ AND password = ‘password’ OR 1=1;
از آنجایی که ‘۱’=’۱′ همیشه درست است، کل عبارت WHERE نیز درست ارزیابی میشود و مهاجم میتواند بدون داشتن رمز عبور صحیح وارد سیستم شود.
پیامدهای SQL Injection
• دسترسی به اطلاعات: مهاجم میتواند اطلاعات حساس مانند نام کاربری، رمز عبور، اطلاعات شخصی و مالی را بخواند، تغییر دهد یا حذف کند.
• تخریب دادهها: امکان حذف کامل جداول یا کل پایگاه داده وجود دارد.
• دسترسی مدیریتی: در برخی موارد، مهاجم میتواند به سیستم، دسترسی مدیریتی پیدا کند.
چطور از آن جلوگیری کنیم؟
بهترین راه برای جلوگیری از این حمله، استفاده از کوئریهای پارامترایز شده (Prepared Statements) است. در این روش، کد SQL و دادههای ورودی به صورت جداگانه به پایگاه داده فرستاده میشوند. به این ترتیب، پایگاه داده میداند که دادههای ورودی فقط مقادیر ساده هستند و نباید آنها را به عنوان بخشی از دستور SQL اجرا کند. این کار ورودیهای مخرب را خنثی کرده و امنیت برنامه را تضمین میکند.

