این حمله میتواند به مهاجم امکان دهد تا :
- اطلاعات حساس را استخراج کند.
- اطلاعات را تغییر دهد یا حذف کند.
- دسترسیهای غیرمجاز به سیستم ایجاد کند.
- کنترل کامل سرور پایگاه داده را در دست بگیرد.
1. ورودی کاربر بدون اعتبارسنجی:
برنامههای آسیبپذیر معمولاً ورودیهای کاربران (مانند فرمها، پارامترهای URL، یا کوکیها) را بدون اعتبارسنجی مناسب مستقیماً در کوئریهای SQL قرار میدهند.
مثال:
SELECT * FROM users WHERE username = 'USER_INPUT' AND password = 'USER_INPUT';
2. استفاده از ORM (Object-Relational Mapping):
- ابزارهایی مانند SQLAlchemy یا Django ORM به طور خودکار از تزریق SQL جلوگیری میکنند.
3. اعتبارسنجی و پاکسازی ورودیها:
- ورودیها باید به طور دقیق بررسی شوند تا مطمئن شوید که فقط دادههای مجاز وارد پایگاه داده میشوند.
4. محدود کردن دسترسی به پایگاه داده:
- کاربران پایگاه داده باید حداقل دسترسی لازم را داشته باشند.
5. استفاده از فایروالهای برنامه وب (WAF):
- این ابزارها میتوانند الگوهای حملات شناختهشده را شناسایی و مسدود کنند.
6. عدم نمایش خطاهای پایگاه داده به کاربران:
- پیامهای خطا نباید اطلاعات حساسی درباره پایگاه داده ارائه دهند.
مثال کاربردی
کد آسیبپذیر:
<?php
$username = $_GET['username'];
$password = $_GET['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
?>
ورودی مخرب:
username: admin' --
password: anything
کد امن:
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
?>