Boolean-basedblindSQLinjection. Ushbu turdagi ineksiya “ko‘r” ineksiya deb atalib, ma’lumotlar bazasidan zaiflik yaqqol ko‘rinmagan holda foydalaniladi. Bunda sintaktik to‘g‘ri bo‘lgan so‘rovlarni kiritish orqali qaytarilgan mantiqiy javobga asoslanib natija aniqlanadi.
Time-based blind SQL injection. Bu to‘liq “ko‘r” ineksiya bo‘lib, unda so‘rovda quyi so‘rov kiritiladi va bu so‘rov ma’lumotlar ba’zasini boshqarish tizimining ishini bir muncha to‘xtatib turadi (SLEEP() yoki BENCHMARK()).
Bu tahdid asosan taqiqlangan belgilarni tekshirmaslik natijasida kelib chiqadi.
Quyida ushbu zaiflikni o‘z ichiga olgan SQL so‘rovi keltirilgan:
statement = "SELECT * FROM users WHERE name = '" + userName + "';"
Bu so‘rovga asosan aynan kerakli foydalanuvchi nomi ma’lumotlar bazasidan qidirilmoqda. Agar bu so‘rov buzg‘unchi tomonidan userName o‘rniga ' OR '1'='1 kiritilsa, quyidigi so‘rov hosil bo‘ladi:
Natijada ma’lumotlar bazasidan barcha foydalanuvchilar to‘g‘risidagi ma’lumotlar chiqariladi. Bu yerda quyidagi taqiqlangan belgilar birikmasidan ham foydalanish mumkin.
Bu tahdidlarni oldini olishda kiruvchi so‘rov maxsus belgilarga tekshirilishi kerak. Ammo, bu so‘rovlarni kundan-kunga yangi turlari kelib chiqmoqda.
So‘rovlarni SQL ineksiyaga zaifligini tekshirish
Buning uchun ma’lumot bazasi yaratib, unda sodda jadvallar yaratamiz. Masalan, “news” nomli jadval yaratib unga “id” nomli ustun qo‘shing. Quyidagi sodda so‘rov jadvaldan berilgan id tegishli ma’lumotni qaytaradi.
$id = $_GET['id'];
$query= "SELECT* FROMnewsWHEREid=$id"; Ushbu so‘rov SQL ineksiyaga tekshirilmagan bo‘lib, uni tekshirish uchun quyidagi so‘rovni kiritamiz:
sqlinj/index1.php?id=1'
agar ushbu buyruq kiritilganda xatolik yuz bersa demak zaiflik mavjud bo‘ladi. Xatolik yuz bersa demak zaiflikga qarshi tekshirilgan yoki xatolikni ko‘rsatish o‘chirib qo‘yilgan.
Qator kiritilganda mavjud xatolikni aniqlash uchun ham yuqoridagi kabi so‘rovni qator tipidagi ustun uchun kiritish zarur.