Identifikatorlarni formatlash
Umuman olganda, identifikatorlarni nomlash qoidalari juda keng . Ammo xavfsizlik uchun biz oq ro'yxatlardan foydalanamiz va to'ldiruvchi faqat formatlash uchun ekanligini hisobga olsak, bu ikkitasi etarli bo'ladi:
identifikator orqa belgilarga ( backticks ) o'ralgan bo'lishi kerak
agar nomda bunday qo'shtirnoq bo'lsa, uni ikki barobarga chiqarish orqali qochish kerak.
function escapeIdent($value)
{
return "`".str_replace("`","``",$value)."`";
}
Lirik chekinish:
Men identifikatorlarni formatlashim kerakmi yoki yo'qmi? Axir, ko'p hollarda bu talab qilinmaydi?
Agar so'rov qo'lda yozilgan bo'lsa, unda ehtiyojni joyida aniqlash mumkin: so'rov ishlaydi - uni formatlay olmaysiz; identifikatorda xatolik bilan ishdan chiqadi - uni formatlashingiz kerak.
Umuman olganda, agar biz to'ldiruvchilardan foydalanish haqida gapiradigan bo'lsak, bu istisnosiz formatlash qoidalarining izchil qo'llanilishi, bu bizga in'ektsiyalardan kafolatlangan himoya haqida gapirishga imkon beradi va bu, eng muhimi, xatolar. Axir, formatlash birinchi navbatda so'rovning sintaktik to'g'riligini ta'minlash uchun amalga oshiriladi. Va in'ektsiyadan himoya qilish - bu faqat yon ta'sir.
Shuning uchun men "qochish" o'rniga "formatlash" atamasidan foydalanishni afzal ko'raman.
Satr harflarini formatlash
Ko'rinishidan, eng xaker mavzu. Ammo, so'nggi maqolalar muhokamasi shuni ko'rsatdiki, ko'pchilik hali ham tushunmagan bo'lsa, hech bo'lmaganda so'z birikmalarida chalkashmoqda. Shunday qilib, keling, SQLda satrlarni formatlash qoidalarini tuzamiz.
satr qo'shtirnoq ichida bo'lishi kerak (bitta yoki ikkita, lekin identifikatorlar uchun juftlikdan foydalanish mumkinligi sababli, har doim bittadan foydalanish yaxshidir)
satrda ro'yxatga muvofiq maxsus belgilar qochishi kerak. Buning uchun API maxsus funktsiyani taqdim etadi. Ushbu funktsiya to'g'ri ishlashi uchun ulanish kodlash to'g'ri sozlangan bo'lishi kerak.
Unda
bu qoidalar faqat bitta emas, har doim birgalikda qo'llanilishi kerak
ularning hech biri satrlardan boshqa ma'lumotlarga taalluqli bo'lmasligi kerak
Oddiy qoidalarni yoqtirasizmi? Ammo qancha odam ularga amal qilmayotgani hayratlanarli, hatto PHP hujjatlarida ham mysql_real_escape_string () haqidagi maqolada shunday yozilgan: “Agar siz ushbu funktsiyadan foydalanmasangiz, so'rov SQL injection yordamida xakerlik hujumiga qarshi himoyasiz bo'lib qoladi. . ” - go'yo uni raqamlar yoki identifikatorlar uchun ishlatish hech bo'lmaganda biror narsaga yordam beradi!
Ammo PDO ni ishlab chiquvchilarni maqtash mumkin - ular ikkala qoidaga birgalikda amal qilgan holda juda mantiqiy harakat qilishdi: PDO :: quote () funktsiyasi ishning yarmini emas, balki butun ishni bajaradi - u satrdan qochib, uni qo'shtirnoq ichiga oladi. Keling, harakat qilaylik Shunday qilib bir xil va biz:
Do'stlaringiz bilan baham: |