Hammasi birda ma'lumotlarni himoya qilish xususiyati
PHP yangi boshlanuvchilar orasida juda keng tarqalgan noto'g'ri tushuncha . "Keling, kiruvchi ma'lumotlardagi barcha "zararli belgilar" ni o'ldiradigan va shu bilan o'zimizni har qanday in'ektsiyadan himoya qiladigan universal funktsiyani kiritaylik!" o'ylaydilar.
Ammo biz allaqachon bilib olganimizdek, "zararli" belgilar yo'q. Faqat ma'lum bir kontekstda ma'lum ma'noga ega bo'lgan xizmat belgilari mavjud. Va boshqa barcha holatlarda butunlay xavfsiz.Shuningdek, biz birinchi navbatda xavfsizlik emas, balki ma'lumotlarni to'g'ri formatlash kerakligini aniqladik. Va buni faqat ular qaysi kontekstda ishlatilishini bilsakgina amalga oshirish mumkin. Ssenariyga kirishda biz hali ham, afsuski, bilmaymiz. Ushbu yondashuvning yorqin misoli - bu mashhur magic_quotes direktivasi , xayriyatki, tildan olib tashlangan. Noto'g'ri ma'lumotlarni qayta ishlash orqali u faqat satrlarni (va faqat tashqaridan skriptga kiradiganlarni) himoya qilish orqali xavfsizlik illyuziyasini yaratdi.
Shuning uchun, iltimos, bu xatolarni takrorlamang - skriptga kirishi bilanoq SQL uchun ma'lumotlarni formatlamang.
Kodlashlar
Kodlash mavzusi faqat satrlarni qo'lda formatlash uchun amal qiladi. Serverda to'ldiruvchilarni qayta ishlashda hech qanday muammo bo'lmaydi.
Bu erda mavzu eski, "bularning barchasi Shiflett o'n sakkizinchi yilda o'ylab topilgan" va shu bilan birga Alshanetskiy mysql_real_escape_string () ham yordam bermasligini ko'rsatdi (!)
Butun hiyla shundan iboratki, hujjatlarda aytilganidan farqli o'laroq , mysql_real_escape_string () agar u maxsus tepilgan bo'lmasa, "ulanishni kodlashni hisobga olmaydi ". Odatiy bo'lib, joriy kodlash latin1 bo'lib, u hech qanday qiyin sozlamalarni talab qilmaydi va mysql_real_escape_string () soqov nisbiy mysql_escape_string () dan aqlliroq emas.
Shu bilan birga, 2006 yilda mysql_real_escape_string () funktsiyasiga mysql kengaytmasidagi joriy kodlashni aytishning oddiy usuli yo'q edi . Biroq, o'shandan beri taraqqiyot ancha oldinga ketdi va vosita paydo bo'ldi - mysql_set_charset () funktsiyasi . Bu SET NAMES so'rovi o'rniga mijoz kodlashni o'rnatish uchun ishlatilishi kerak.
Har holda, in'ektsiya faqat ba'zi ekzotik kodlashlar uchun mumkin. Barcha bitta baytli kodlashlar va UTF-8 xavfsizdir (buning oqibati shundaki, mashhur qo'shimchalar ( ) ular uchun ham mos keladi).
Men bularning barchasi qanday ishlashini tekshirish uchun juda dangasa emas edim. Aynan bashorat qilinganidek ishlashiga ishonch hosil qiling.
Do'stlaringiz bilan baham: |