SQL Injection کلاسیک (In-band) در مقابل SQL Injection کور (Blind)
در SQL Injection کلاسیک، مهاجم نتیجه کوئری مخرب یا پیام خطای دیتابیس را مستقیماً در پاسخ صفحه میبیند، در حالی که در نوع کور (Blind) هیچ داده یا خطایی مستقیماً نمایش داده نمیشود و مهاجم باید از طریق تغییرات رفتاری غیرمستقیم (مثل تفاوت زمان پاسخ یا صحت/خطای بولی صفحه) اطلاعات را حدس بزند.
| ویژگی | SQL Injection کلاسیک (In-band) | SQL Injection کور (Blind) |
|---|---|---|
| قابل مشاهده بودن نتیجه | مستقیم در پاسخ | غیرمستقیم و پنهان |
| سرعت استخراج داده | سریع | کند (بایتبهبایت) |
| روش تشخیص توسط مهاجم | خطا/داده مستقیم | زمان پاسخ یا نتیجه بولی |
کِی از SQL Injection کلاسیک (In-band) استفاده کنیم؟
زمانی رخ میدهد که برنامه پیام خطای دیتابیس یا نتیجه کوئری را مستقیم در صفحه نمایش میدهد و برای مهاجم استخراج داده بسیار سریعتر است.
کِی از SQL Injection کور (Blind) استفاده کنیم؟
زمانی رخ میدهد که برنامه هیچ خطا یا دادهای نشان نمیدهد، اما مهاجم میتواند از طریق سوالات بله/خیر (Boolean-based) یا تأخیر زمانی (Time-based) داده را بایتبهبایت استخراج کند.
مثال SQL Injection کلاسیک (In-band)
-- In-band: نتیجه مستقیم در پاسخ دیده میشود
' UNION SELECT username, password FROM Users--
-- خروجی مستقیم در صفحه HTML نمایش داده میشود
مثال SQL Injection کور (Blind)
-- Blind (Time-based): بدون پاسخ مستقیم
' OR IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0)--
-- مهاجم از تأخیر ۵ ثانیهای پاسخ نتیجه را حدس میزند
اشتباه رایج
اشتباه رایج فرض این است که چون صفحه هیچ خطا یا دادهای نشان نمیدهد، برنامه در برابر SQL Injection ایمن است؛ در حالی که نوع Blind دقیقاً برای همین شرایط طراحی شده و میتواند بهکندی ولی به همان اندازه کل دیتابیس را استخراج کند.
جمعبندی
هر دو نوع فقط با استفاده از Parameterized Query یا ORM قابل پیشگیریاند؛ نبود پیام خطای قابل مشاهده بهتنهایی هیچ تضمین امنیتی نیست.
