تزریق SQL (SQL Injection) : یکی از روش های رایج حملات امنیتی است که… — 👨‍💻 برنامه نویسی و تست نفوذ 👨‍💻 — TG.ME

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

این حمله میتواند به مهاجم امکان دهد تا :

- اطلاعات حساس را استخراج کند.
- اطلاعات را تغییر دهد یا حذف کند.
- دسترسی‌های غیرمجاز به سیستم ایجاد کند.
- کنترل کامل سرور پایگاه داده را در دست بگیرد.

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();
?>
💎7
December 31, 2024 2.3K 18