Validation — ma’lumotning oldindan belgilangan sintaktik, semantik va biznes qoidalariga mosligini tekshirish jarayoni. U forma maydoni, API request, konfiguratsiya, fayl yoki database yozuviga tatbiq etiladi. Validation “zararli belgilarni olib tashlash” emas; tizim qabul qiladigan data modelini aniq belgilashdir. Xavfsizlikda u injection, noto‘g‘ri holat va resurs suiiste’molini kamaytiradi, lekin output escaping hamda authorization o‘rnini bosmaydi.
Sintaktik tekshiruv
Sintaktik validation qiymatning turi va shaklini tekshiradi: integer, sana, UUID, emailga o‘xshash satr yoki enum. JSON schema majburiy maydon, tur, minimal va maksimal qiymat, string uzunligi hamda qo‘shimcha maydon siyosatini ifodalashi mumkin. Parse qilinmagan string ustida keyingi biznes mantiqni bajarish o‘rniga, ma’lumot avval typed modelga aylantiriladi.
Regex oddiy format uchun foydali, ammo murakkab standartni to‘liq ifodalashda xatoga moyil. Emailni haddan tashqari tor regex bilan tekshirish haqiqiy manzillarni rad etishi mumkin; amaliy tasdiq uchun verification xati yuboriladi. Foydalanuvchi boshqaradigan uzun matnga murakkab backtracking regex qo‘llash ReDoSga olib kelmasligi uchun pattern va input uzunligi cheklanadi.
Semantik va biznes qoidalari
Sana sintaktik to‘g‘ri bo‘lsa ham, boshlanish sanasi tugashdan keyin bo‘lishi mumkin. Mahsulot soni musbat integer bo‘lsa ham, ombordagi mavjud miqdordan oshmasligi kerak. Bunday cross-field va domain qoidalar semantik validationga kiradi. Tekshiruv ayni database holatiga bog‘liq bo‘lsa, validation bilan yozish bitta tranzaksiya yoki constraint orqali race conditiondan himoyalanadi.
“Username band emas” tekshiruvidan keyin boshqa request ayni nomni olishi mumkin. Database unique constraint yakuniy kafolat beradi, ilova esa conflict xatosini foydalanuvchiga tushunarli ko‘rsatadi. Balans yoki kvota kabi invariantlar ham faqat frontend hisobiga topshirilmaydi.
Client va server
HTML required, min, pattern va client-side JavaScript tez feedback beradi, ammo foydalanuvchi yoki bot ularni chetlab APIga to‘g‘ridan-to‘g‘ri so‘rov yubora oladi. Server barcha ishonch chegarasidan kirgan data’ni mustaqil tekshiradi. Client qoidalari UX uchun server schema’dan generatsiya qilinishi mumkin, lekin yakuniy qaror serverda qoladi.
Microservice arxitekturasida gateway request formatini tekshirishi mumkin, lekin ichki servis o‘z biznes invariantlarini saqlaydi. Queue’dan kelgan xabar ham “ichki” bo‘lgani uchun mutlaq ishonchli emas; producer versiyasi, buzilgan account yoki eski xabar noto‘g‘ri data yuborishi mumkin.
Allowlist va normallashtirish
Imkoniyatlar soni cheklangan maydonda allowlist ishlatiladi: sort yo‘nalishi faqat asc yoki desc, fayl turi aniq ro‘yxat, country code standart qiymatlar bilan cheklanadi. Denylist barcha zararli variantlarni sanashga urinadi va yangi bypassni o‘tkazib yuboradi. Erkin matn esa o‘z tabiatiga ko‘ra keng belgilarni qabul qilishi mumkin; u chiqish kontekstida escape qilinadi.
Unicode normalization, case folding, whitespace va URL canonicalization qaysi bosqichda bajarilishi aniqlanadi. Validation bir ko‘rinishda, access control boshqa ko‘rinishda ishlasa, ikki turli satr bir resursga olib borishi mumkin. Original qiymatni audit uchun saqlash kerak bo‘lsa, canonical qiymat alohida maydonda yuritiladi.
Fayl va resurs chegaralari
Upload validation faqat filename extensionga qaramaydi. MIME type, magic bytes, parser natijasi, decompressed hajm va rasm o‘lchami tekshiriladi. Polyglot fayl bir nechta format sifatida talqin qilinishi mumkin. Ishonchsiz parser sandbox qilinadi, fayl web rootdan tashqarida saqlanadi va download’da xavfsiz Content-Type beriladi.
Uzunlik va elementlar soni ham validation qismidir. Juda chuqur JSON, milliardlik page size yoki ulkan regex input CPU va xotirani tugatishi mumkin. Chegaralar biznes ehtiyojiga mos qo‘yiladi va rad javobi maxfiy ichki stack trace’ni oshkor qilmaydi.
Bog‘liq tushunchalar
Input validation, JSON Schema, Database constraint, Allowlist, Sanitization, Output escaping, Business rule