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:

SQL · namuna baza

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:

  1. WHERE ism = '' OR '1'='1' so’rovini ishga tushiring;
  2. natijaga qarang — nechta qator qaytdi va nega?
  3. oddiy WHERE ism = 'Aziz' bilan solishtiring;
  4. OR '1'='1' qismi shartni qanday o’zgartirganini tushuntiring;
  5. 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.

Bu dars foydali bo'ldimi?

marta ko'rildi