SQL injection va undan himoya
Baza bilan ishlaydigan dasturda so’rovlar ko’pincha foydalanuvchi kiritmasidan quriladi — masalan ism bo’yicha qidiruv. Agar bu noto’g’ri qilinsa, buzg’unchi so’rovni o’zgartirib, butun bazani buzishi mumkin. Bu hujum SQL injection deyiladi. Bu darsda uning mohiyati va himoyasini ko’ramiz.
Muammo: kiritmani to’g’ridan qo’shish
Aytaylik, dastur ism bo’yicha qidiradi va so’rovni satrlarni ulab quradi:
kiritma = input("Ism: ")
so'rov = "SELECT * FROM mijozlar WHERE ism = '" + kiritma + "'"
Oddiy ism (Aziz) uchun ishlaydi. Lekin buzg’unchi shunday yozsa:
'; DROP TABLE mijozlar; --
So’rov quyidagiga aylanadi va mijozlar jadvali o’chib ketadi:
SELECT * FROM mijozlar WHERE ism = ''; DROP TABLE mijozlar; --'
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
Kiritma kod sifatida bajarildi — mana SQL injection.
Yechim: parametrli so’rov
Himoya — kiritmani so’rovga ulab yozmaslik, balki uni alohida parametr
sifatida uzatish. Kod ichida ? belgisi qo’yiladi, qiymat esa alohida
beriladi:
kiritma = input("Ism: ")
cursor.execute(
"SELECT * FROM mijozlar WHERE ism = ?",
(kiritma,)
)
Endi baza kiritma ni faqat ma’lumot deb qabul qiladi — ichidagi SQL hech
qachon bajarilmaydi. '; DROP TABLE ... yozilsa ham, u shunchaki qidiriladigan
matn bo’lib qoladi, kod emas.
Amaliy mashq
Hujumni tushunib, himoyani o’rganing:
WHERE ism = '' OR '1'='1'so’rovini ishga tushiring;- natijaga qarang — nechta qator qaytdi va nega?
- oddiy
WHERE ism = 'Aziz'bilan solishtiring; OR '1'='1'qismi shartni qanday o’zgartirganini tushuntiring;- qog’ozda yozing: bu so’rov foydalanuvchi kiritmasidan qurilganda dasturchi qanday xato qilgan?
Himoya yo’li — parametrlangan so’rov. Nega oddiy qo’shtirnoq yetarli emas?
Qisqacha xulosa
- SQL injection — kiritma orqali so’rovga begona SQL qo’shish hujumi.
- Sabab: kiritma kod sifatida talqin qilinishi.
- Xavf: ma’lumotni o’g’irlash, o’zgartirish yoki butun jadvalni o’chirish.
- Himoya: parametrli so’rov (
?bilan) — kiritma faqat ma’lumot bo’ladi. - Kiritmani hech qachon so’rovga to’g’ridan-to’g’ri ulamang.
Keyingi darsda ER-model va baza dizayni — bazani qurishdan oldin uni to’g’ri rejalashtirishni ko’ramiz.