CodeShot

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 قابل پیشگیری‌اند؛ نبود پیام خطای قابل مشاهده به‌تنهایی هیچ تضمین امنیتی نیست.