حمله SQL Injection

حمله SQL Injection

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


🔥 SQL Injection چیست؟

SQL Injection یک روش نفوذ است که در آن مهاجم، بجای وارد کردن داده‌های عادی در فرم‌ها، URL یا ورودی‌های سایت، دستورهای SQL قرار می‌دهد تا کوئری اصلی برنامه تغییر کرده و پایگاه‌داده کاری را انجام دهد که مهاجم می‌خواهد.

این حمله معمولاً زمانی رخ می‌دهد که برنامه‌نویس:

  • ورودی‌ها را فیلتر نکرده باشد

  • از کوئری‌های پارامتری (Prepared Statement) استفاده نکرده باشد

  • از روش‌های ناامن مانند اتصال مستقیم متغیرها در کوئری استفاده کرده باشد


🎯 یک مثال ساده از SQL Injection

فرض کنید سیستم لاگین سایت این کوئری را اجرا می‌کند:

SELECT * FROM users WHERE username='$user' AND password='$pass';

مهاجم در قسمت username وارد می‌کند:

' OR '1'='1

کوئری تبدیل می‌شود به:

SELECT * FROM users WHERE username='' OR '1'='1' AND password='$pass';

نتیجه👇
🔓 بدون داشتن رمز عبور، ورود موفق انجام می‌شود.


🚨 چه خطراتی با SQL Injection ایجاد می‌شود؟

✔ دسترسی به اطلاعات دیتابیس

مثل ایمیل‌ها، شماره‌ها، پسوردهای کاربران و…

✔ دور زدن ورود (Login Bypass)

مهاجم می‌تواند بدون رمز، وارد اکانت ادمین شود.

✔ حذف یا ویرایش اطلاعات

DROP TABLE، UPDATE، DELETE و…

✔ اجرای دستور روی سیستم (در برخی دیتابیس‌ها)

مثلاً اجرای دستورات در MySQL با help of xp_cmdshell در MSSQL.

✔ استخراج مخفیانه اطلاعات

حتی بدون خطا! (روش Blind SQLi)

✔ آسیب مالی و اعتباری شدید برای کسب‌وکار

هک شدن دیتابیس = جریمه، شکایت، از دست رفتن اعتبار برند.


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

1️⃣ In-band SQL Injection (مستقیم – رایج‌ترین)

نتیجه حمله در همان صفحه نشان داده می‌شود.

  • Union-based SQLi
    استفاده از UNION برای ترکیب نتایج دیتابیس

  • Error-based SQLi
    استفاده از خطاهای دیتابیس برای استخراج اطلاعات

2️⃣ Blind SQL Injection (کور)

اطلاعات آشکار نمایش داده نمی‌شود، اما با روش‌های غیرمستقیم می‌توان داده استخراج کرد.

  • Boolean-based

  • Time-based

3️⃣ Out-of-band SQL Injection (غیرمستقیم)

با ارسال داده به سرور دیگر (DNS/HTTP) اطلاعات استخراج می‌شود.
در شرایط خاص استفاده می‌شود و خطرناک‌ترین نوع است.


🛡️ چگونه از SQL Injection جلوگیری کنیم؟

✔ 1. استفاده از Prepared Statement (ایمن‌ترین روش)

مثال PHP – PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute([$username]);
مثال Python – SQLite:
cursor.execute("SELECT * FROM users WHERE username=?", (username,))
مثال Node.js – MySQL2:
connection.execute('SELECT * FROM users WHERE id = ?', [id]);

✔ 2. استفاده از ORM

فریم‌ورک‌هایی مانند Laravel، Django، Spring Boot و…
به‌صورت پیش‌فرض جلوی تزریق را می‌گیرند.


✔ 3. فیلتر و اعتبارسنجی ورودی‌ها

  • حذف کاراکترهای حساس

  • محدود کردن نوع ورودی (اعداد، حروف خاص، Regex)


✔ 4. محدود کردن دسترسی یوزر دیتابیس

دنیا خراب نمی‌شود اگر MySQL User نتواند DROP TABLE بزند!


✔ 5. استفاده از Web Application Firewall (WAF)

Cloudflare – ModSecurity – F5
به‌صورت خودکار بسیاری از تزریق‌ها را مسدود می‌کنند.


🧪 نمونه حمله UNION-based SQL Injection

مثلاً URL سایت:

site.com/product?id=15

مهاجم تست می‌کند:

site.com/product?id=15 UNION SELECT 1,2,3--

اگر صفحه اطلاعات نشان داد، یعنی سایت آسیب‌پذیر است و مهاجم می‌تواند:

  • نام جدول‌ها

  • نام ستون‌ها

  • اطلاعات کاربران

را پیدا کند.


🧾 چک‌لیست جلوگیری از SQL Injection

مورد توضیح
استفاده از Prepared Statements مهم‌ترین و بهترین روش
فیلتر ورودی اعداد فقط عدد، متن محدود
استفاده از ORM امنیت داخلی دارد
فعال کردن WAF تشخیص اتوماتیک حملات
رمزنگاری پسوردها به‌صورت Hash شده
عدم نمایش خطا به کاربر اطلاعات دیتابیس لو نرود
محدودیت سطح دسترسی DB یوزر مجوز Drop/Delete نداشته باشد

SQL Injection یکی از مخرب‌ترین حملات علیه وب‌سایت‌هاست که اگر جدی گرفته نشود، می‌تواند باعث از بین رفتن کامل دیتابیس، سرقت اطلاعات و دسترسی غیرمجاز مهاجمان شود.
با استفاده از کوئری‌های پارامتری، فریم‌ورک‌های امن، اعتبارسنجی ورودی و فعال‌سازی WAF می‌توان به‌راحتی در برابر این حمله ایمن شد.

رضا فروزان
رضا فروزان

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

مقالات مرتبط
پاسخ دهید

آدرس ایمیل شما منتشر نخواهد شد.قسمتهای مورد نیاز علامت گذاری شده اند *