"SQL
injection"
nima ?
18/01 IAT
Raximboeva Guli
SQL
Injection
SQL-Injection – bu ma'lumotlar bazasiga
qilingan so'rovni qalbakilashtirish,
ya'ni dasturchi e'tiborsizligi natijasida
kiritiluvchi ma'lumotlarni
filtrlanmasligidan foydalanib, so'rovga
o'zgartirish kiritish orqali serverdagi
ma'lumotlar bazasiga yo'l topishdir.
O d d i y S Q L s o ' r o v :
Barchasi yana ham tushunarliroq bo'lishi uchun sizga hozir avval oddiy bir SQL so'rovni yozib ko'rsataman
kiyin esa birgalikda ushbu so'rovni "SQL injection" uslubidagi hujum buyrug'iga alishtiramiz.
SELECT * FROM yangiliklar WHERE yangilik_id = 5;
Ushbu so'rovda ma'lumotlar omboridagi "yangiliklar" jadvalidan id raqami 5 bo'lgan qaydni so'rayapmiz,
ammo ushbu 5 raqami o'rnida GET uslubdagi havoladan olingan o'zgaruvchi saqlovchi bo'ladi va o'sha
havoladagi o'zgaruvchining qiymatiga 5 emas SQL so'rovni davom etuvchi qo'shimcha yozishimiz mumkin:
SELECT * FROM yangiliklar WHERE yangilik_id = -1 OR 1=1;
Yuqoridagi o'zgartirilgan so'rovda biz id raqami 5 ga teng bo'lgan yagona qaydni emas umuman barcha
qaydlarni so'rab olishimiz mumkin, shunga o'xshash oddiy o'zgaruvchini SQL so'rovga o'zgartirishimiz orqali
qaydlarni olishimiz, o'chirishimiz, yaratishimiz yoki o'zgartirishimiz mumkin
Mi
so
ll
ar
y
or
da
mi
da
ko
'r
ib
c
hi
qa
mi
z
Eng oddiy va ko'p qo'llaniladigan usul
bu WHERE shartli operatoriga doim
haqiqat bo'ladigan shartni yoki
qiymatni yuborish. Bunday uslub SQL
so'rov javob beradigan ma'lumotlar
omborida har bir qayd uchun ma'qul
kelaveradi, natijada ma'lumotlar
ombori barcha qaydlarni taqdim etadi.
Navbatdagi jiddiy va qo'rqinchli
usullardan biri bu UNION operatori
yordamida bir so'rov ichiga boshqa
so'rovni bog'lab yuborishdir.
Uchinchi uslub bu butun boshli
so'rovning ma'lum bir qismini izoh
shakliga o'tkazish orqali ma'lumotlar
omboriga tugallanmaydigan so'rov
yuborishdir
"SQL injection"
hujum turlari
1
2
3
In'ektsiyalarni oldini olish usuli SQL-da maxsus ma'noga ega bo'lgan
belgilardan qochishdir. SQL DBMS uchun qo'llanmada qaysi belgilar alohida
ma'noga ega ekanligi tushuntiriladi, bu esa har tomonlama yaratishga imkon
beradi qora ro'yxat tarjimaga muhtoj bo'lgan belgilar. Masalan, bitta
tirnoqning har bir paydo bo'lishi (') parametrda ikkita bitta tirnoq bilan
almashtirilishi kerak ('') haqiqiy SQL mag'lubiyatini yaratish uchun.
Masalan, ichida PHP funktsiya yordamida parametrlardan qochish odatiy
holdir mysqli_real_escape_string ();
SQL so'rovini yuborishdan oldin:
$ mysqli = yangi mysqli("xostname", 'db_username', 'db_password',
'db_name');$ so'rov = sprintf("SELECT * from Users` WHERE UserName = '% s'
AND Password = '% s'", $ mysqli->real_escape_string($
foydalanuvchi nomi), $ mysqli->real_escape_string($
parol));$ mysqli->so'rov($ so'rov);
98 Saxton Street
(458) 8889-6654
saxton@wiksun.pt
756 Cross Lane
(487) 6695-4412
cross@wiksun.pt
8921 Mayfield Lane
(897) 8955-6548
mayfield@wiksun.pt
SQL Injection
dan himoyalanish
Ushbu funktsiya teskari chiziqlarni quyidagi belgilarga o'rnatadi: x00, n, r, \, ', "
va x1a.Ushbu funktsiya odatda so'rov yuborishdan oldin ma'lumotlarni xavfsiz
qilish uchun ishlatiladi
PHP pg_escape_string () kabi boshqa ma'lumotlar bazalari tizimlari uchun
o'xshash funktsiyalarga ega . Funktsiya qo'shimchalar (string $ str) belgilar
qochish uchun ishlaydi va ayniqsa PHP da qochish funktsiyalari bo'lmagan
ma'lumotlar bazalarida so'rovlar uchun ishlatiladi. Ma'lumotlar bazasi
so'rovlarida qochish kerak bo'lgan belgilar oldidan teskari chiziqli qatorni
qaytaradi va hokazo. Ushbu belgilar bitta tirnoq ('), ikkita tirnoq ("), teskari
chiziq () va NUL (NULL bayt).
Qochilgan satrlarni SQL-ga muntazam ravishda uzatish xatoga yo'l qo'yadi,
chunki berilgan satrdan qochishni unutish oson. Kirishni ta'minlash uchun
shaffof qatlamni yaratish bu xatolikni kamaytirishi mumkin, agar uni butunlay
yo'q qilmasa.
Do'stlaringiz bilan baham: |