
حمله Blind SQL Injection از نوع Time-Based
حمله Blind SQL Injection از نوع Time-Based: تهدیدی خاموش برای امنیت وبسایتها
در دنیای امنیت سایبری، SQL Injection یکی از خطرناکترین آسیبپذیریها به شمار میآید. در این میان، نوع خاصی از آن به نام Blind SQL Injection وجود دارد که در نبود پیامهای خطای قابل مشاهده، به صورت مخفیانه به استخراج دادهها میپردازد. در این مقاله قصد داریم نوع Time-Based Blind SQL Injection را به صورت دقیق و کاربردی بررسی کنیم.
SQL Injection چیست؟
SQL Injection یک نوع حمله در لایه پایگاهداده است که در آن هکر با تزریق دستورات SQL مخرب به پارامترهای ورودی، تلاش میکند به اطلاعات حساس یا کنترل پایگاهداده دست پیدا کند. برای مثال:
SELECT * FROM users WHERE username = '$input'
اگر ورودی کاربر کنترل نشده باشد، مهاجم میتواند عباراتی مانند زیر وارد کند:
' OR '1'='1
که منجر به بازیابی تمام اطلاعات جدول خواهد شد.
Blind SQL Injection چه تفاوتی دارد؟
در برخی سیستمها، پیام خطا نمایش داده نمیشود و یا پاسخ مستقیم از پایگاهداده قابل مشاهده نیست. در این شرایط، مهاجم باید از روشهای غیرمستقیم برای تشخیص صحت فرضیات خود استفاده کند. یکی از این روشها، تأخیر در پاسخ (Time Delay) است.
Time-Based Blind SQL Injection چگونه عمل میکند؟
در این نوع حمله، هکر از دستورات توابعی مانند SLEEP()
در MySQL یا WAITFOR DELAY
در MSSQL استفاده میکند. به عنوان مثال:
SELECT * FROM users WHERE id = 1 AND SLEEP(5);
اگر سرور ۵ ثانیه تأخیر داشت، مهاجم متوجه میشود که شرط درست بوده و اطلاعاتی وجود دارد.
فرایند کلی حمله:
-
ارسال ورودی مشکوک همراه با شرط و تابع تأخیر
-
سنجش زمان پاسخدهی سرور
-
استخراج اطلاعات بیت به بیت یا کاراکتر به کاراکتر
نمونه کد و مثال کاربردی
فرض کنید یک فرم جستجو دارید که آیدی کاربر را دریافت میکند:
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = '$id'";
اگر کاربر وارد کند:
1' AND IF(SUBSTRING((SELECT password FROM users WHERE username='admin'),1,1)='a', SLEEP(5), 0) --
در صورتی که کاراکتر اول رمز عبور "a" باشد، سرور ۵ ثانیه مکث خواهد کرد.
برای تست و بررسی امنیت وبسایتهای خود در برابر این نوع حملات، توصیه میشود از یک محیط ایزوله و امن مانند سرورهای مجازی یا ابری رادیب استفاده کنید. این سرورها با منابع اختصاصی و قابل ارتقاء، بستری مناسب برای توسعه، تست و راهاندازی وباپلیکیشنهای امن فراهم میکنند.
چگونه از این نوع حمله جلوگیری کنیم؟
برای مقابله با Blind SQL Injection، اقدامات زیر ضروری است:
1. استفاده از کوئریهای آماده (Prepared Statements)
مثال در PHP با PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
2. فیلتر و اعتبارسنجی ورودیها
تمام ورودیهای کاربر باید بررسی شوند و اطمینان حاصل شود که هیچگونه کد یا دستور اضافی وارد نمیشود.
3. محدود کردن دسترسی پایگاهداده
حساب کاربری متصل به پایگاهداده نباید دسترسیهای اضافی مانند DROP یا DELETE داشته باشد.
4. استفاده از WAF و فایروالهای برنامههای وب
این ابزارها میتوانند حملات متداول مانند SQL Injection را به صورت خودکار مسدود کنند.
اگر کسبوکار شما به دنبال زیرساختی امن و قابل اعتماد است، پیشنهاد ما استفاده از سرورهای ابری و اختصاصی رادیب است. با منابع کاملاً اختصاصی و تنظیمات امنیتی پیشرفته، رادیب بستری امن برای اجرای وبسایتها و اپلیکیشنهای حیاتی فراهم میسازد.
جمعبندی
Time-Based Blind SQL Injection یکی از پیچیدهترین و خطرناکترین روشهای استخراج اطلاعات از پایگاهداده بدون نمایش خطا است. با درک نحوه عملکرد این حمله و اجرای اقدامات پیشگیرانه، میتوان از بسیاری از تهدیدات سایبری جلوگیری کرد.
در نهایت، امنیت یک فرآیند مستمر است، نه یک اقدام موقت. اگر در حال راهاندازی یک پروژه جدی هستید، زیرساخت شما نیز باید به همان اندازه حرفهای و ایمن باشد.
کسانی که این مقاله را خوانده اند مقالات زیر را هم دنبال کرده اند