Kirish ma'lumotlarini tekshirish — ilova ularni qayta ishlashdan oldin kiruvchi ma'lumotlarning kutilgan format, tur va qiymat diapazoniga mosligini tekshirish jarayoni. OWASP Input Validation Cheat Sheet (2025) ma'lumotlariga ko'ra, validatsiyaning yo'qligi ko'pgina kritik zaifliklarning asosiy sababidir. Kiruvchi ma'lumotlarni tekshirish tizimga noto'g'ri yoki zararli ma'lumotlar kirishining oldini oladigan birinchi himoya chegarasidir.
Asosiy
Kirish ma'lumotlarini tekshirish — foydalanuvchidan, tashqi xizmatdan yoki boshqa komponentdan ilovaga kelayotgan ma'lumotlarning kutilgan mezonlarga mosligini tekshirish. Bu mezonlarga ma'lumot turi (satr, son, sana), format (email, URL, telefon), qiymat diapazoni (yosh 18 dan 120 gacha), uzunlik (parol 8 dan 128 belgigacha) va ruxsat etilgan belgilar (faqat lotin harflari, raqamlar, defis) kiradi. Validatsiyasiz ilova bajarish xatolariga, ma'lumotlarning buzilishiga yoki xavfsizlik zaifliklariga olib kelishi mumkin bo'lgan ma'lumotlarni qayta ishlashi mumkin.
Kirish ma'lumotlari validatsiyasining yo'qligi SQL Injection, XSS, Command Injection, Path Traversal va Buffer Overflow kabi zaifliklarning asosiy sababidir. MITRE CWE (2025) ma'lumotlariga ko'ra, CWE-20 (Improper Input Validation) eng xavfli dasturiy xatolar reytingida ikkinchi o'rinni egallaydi. Validatsiya Defense in Depth xavfsizlik modelida birinchi himoya chizig'idir: u noto'g'ri ma'lumotlarni tizimning boshqa komponentlariga yetib bormasdan kesib tashlaydi.
Validatsiya mezonlarga mos kelmaydigan ma'lumotlarni rad etadi. Sanitizatsiya (tozalash) xavfli qismlarni olib tashlash yoki kodlash orqali ma'lumotlarni o'zgartiradi. Masalan, HTML-mazmun kiritilganda validatsiya matn uzunligini tekshirishi mumkin, sanitizatsiya esa HTML Purifier yoki DOMPurify kutubxonasi orqali script-teglarini olib tashlashi mumkin. Sanitizatsiya validatsiyani almashtirmaydi: ular juft bo'lib ishlaydi. Validatsiya "ruxsat berilgan/taqiqlangan" siyosati, sanitizatsiya esa "ishlatishdan oldin tozalangan".
Validatsiya tekshirish chuqurligiga qarab tasniflanadi. Format validatsiyasi eng sodda va eng tezdir, biznes validatsiyasi esa eng murakkab va kontekstga bog'liqdir. Har uchala daraja ketma-ket qo'llanilishi kerak: avval format, keyin semantika, so'ngra biznes-mantiq. Istalgan darajani o'tkazib yuborish tizimning noto'g'ri ishlashiga yoki zaiflikka olib kelishi mumkin.
| Daraja | Nimani tekshiradi | Misol |
|---|---|---|
| Format | Ma'lumot turi, uzunlik, muntazam ifoda | Email @ belgisini o'z ichiga oladi, uzunlik 5-100 |
| Semantik | Qiymatning mantiqiy to'g'riligi | Tug'ilgan sana kelajakda emas |
| Biznes validatsiya | Biznes qoidalariga muvofiqlik | O'tkazma summasi balansdan oshmaydi |
Ma'lumot turi, o'lchami, formati va ruxsat etilgan belgilarni tekshirish. Muntazam ifodalar, tillarning ichki turlari va validatsiya kutubxonalari orqali amalga oshiriladi. Misollar: UUID ni tekshirish (8-4-4-4-12 o'n oltilik raqam formati), telefon raqamini tekshirish (faqat raqamlar, boshida +, 7 dan 15 belgigacha), butun sonni tekshirish (Integer.MIN_VALUE — Integer.MAX_VALUE diapazonidagi qiymat). Format validatsiyasi istalgan kiritish maydoni uchun minimal zarur darajadir.
Ma'lumotlarning predmet sohasi kontekstida mantiqiy to'g'riligini tekshirish. Masalan: boshlanish sanasi tugash sanasidan kech emas, yosh tizim uchun oqilona chegaralarda, koordinatalar xizmat hududida. Semantik validatsiya biznes kontekstini tushunishni talab qiladi va faqat format asosida bajarilmaydi. Misol: "chiptalar soni" maydoni format tekshiruvidan o'tishi mumkin (butun son, > 0), lekin semantik jihatdan bo'sh o'rinlar sonidan oshmasligi kerak.
Eng murakkab daraja — ma'lumotlarning ilovaning biznes qoidalariga mosligini tekshirish. Misollar: foydalanuvchi yagona administratorni o'chira olmaydi, buyurtma summasi kredit limitidan oshmaydi, mahsulot faqat mavjud bo'lsa buyurtma qilinishi mumkin. Biznes validatsiya ko'pincha ma'lumotlar bazasi so'rovlarini yoki tashqi xizmatlarni talab qiladi va format hamda semantik tekshiruvlardan keyin bajariladi. Biznes validatsiya xatolari foydalanuvchilar noroziligining eng keng tarqalgan sababidir.
Mijoz tomonidagi validatsiya (brauzerda yoki mobil ilovada) foydalanuvchi qulayligi uchun kerak: ma'lumotlarni serverga yubormasdan zudlik bilan fikr bildirish. Biroq server validatsiyasi yagona ishonchli usuldir, chunki mijoz kodini har doim chetlab o'tish mumkin. So'rovlarni dasturchi vositalari, Postman yoki proksi (Burp Suite) orqali yuboring — mijoz validatsiyasi mavjud bo'lishdan to'xtaydi. PortSwigger Research (2025) ma'lumotlariga ko'ra, sinovdan o'tgan veb-ilovalarning 90% dan ortig'i kamida bitta maydon uchun faqat mijoz validatsiyasiga tayanadi.
Mijoz validatsiyasi yuborish tugmasini o'chirishi, xatolarni belgilashi, maslahatlarni ko'rsatishi mumkin. Server validatsiyasi har bir parametrning majburiy tekshiruvidir, hatto mijoz uni allaqachon tekshirgan bo'lsa ham. Ikkala darajada validatsiyani takrorlash standart amaliyotdir. Server ma'lumotlarni mijoz mavjud bo'lmagandek tekshirishi kerak. Bu o'zgartirilgan so'rovlar, avtomatlashtirilgan hujumlar va zararli mijozlardan himoyalanishni kafolatlaydi.
Vebda — HTML5 atributlari (required, pattern, min/max, type="email") va JavaScript. Mobil ilovalarda — matn maydonlarining native validatsiyalari (Android-da InputFilter, iOS-da textField(:shouldChangeCharactersIn:)). React uchun React Hook Form va Formik, Vue uchun Vuelidate, Angular Reactive Forms — mijoz validatsiyasi uchun mashhur kutubxonalar. Ularning barchasi maxsus qoidalar va asinxron validatsiyani (serverda login yagonaligini tekshirish) qo'llab-quvvatlaydi.
// Express va Joi bilan server validatsiyasi namunasi
const Joi = require('joi');
const userSchema = Joi.object({
email: Joi.string()
.email()
.required()
.max(255),
age: Joi.number()
.integer()
.min(18)
.max(120)
.required(),
password: Joi.string()
.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,128}$/)
.required()
});
app.post('/api/users', async (req, res) => {
const { error, value } = userSchema.validate(req.body);
if (error) {
return res.status(400).json({
error: error.details[0].message
});
}
// value — allaqachon tekshirilgan va xavfsiz ma'lumotlar
const user = await User.create(value);
res.status(201).json(user);
});
Mobil ilovalar ma'lumot validatsiyasiga alohida talablar qo'yadi. Ekran kichikroq — xatolar ixcham bo'lishi kerak, klaviatura kontekstli (raqamlarni kiritish uchun raqamli), tekshiruv esa UI-ni bloklamaslik uchun asinxron bo'lishi kerak. Native platformalar odatda ishlatilishi kerak bo'lgan ichki validatsiya mexanizmlarini taqdim etadi. Android uchun Material Design Guidelines va iOS uchun Human Interface Guidelines validatsiya xatolarini ko'rsatish bo'yicha batafsil tavsiyalarni o'z ichiga oladi.
Jetpack Compose state-boshqaruv orqali validatsiyaga deklarativ yondashuvni taklif qiladi. Har bir kiritish maydoni holatga (MutableState) bog'langan, xato esa joriy qiymat asosida hisoblanadi. Compose Validator kutubxonasi qoidalarni yaratishni soddalashtiradi: required, email, min/max length, pattern. Validatsiya matn o'zgarganda (onValueChange) yoki formani yuborishga urinishda ishga tushadi. Xatoni faqat birinchi yuborishdan keyin yoki foydalanuvchi kiritishni tugatgandan so'ng (debounce 300-500ms) ko'rsatish tavsiya etiladi.
SwiftUI formaning ichki validatsiya mexanizmiga ega emas, lekin uni Combine va property wrappers orqali oson amalga oshirish imkonini beradi. Maydon qiymati uchun @State, xato uchun esa hisoblanadigan xususiyatdan foydalaning. ValidatedPropertyKit freymvorki tayyor dekoratorlarni taqdim etadi: @Validated().email(), @Validated().range(18...120). iOS tavsiyasi — kiritish darajasida xatolar sonini kamaytirish uchun klaviatura turlaridan (UIKeyboardType.emailAddress, .numberPad) va auto-capitalization-dan foydalaning.
Flutter validator-kolbek orqali ichki validatsiyaga ega Form va TextFormField sinflarini taqdim etadi. Har bir maydon xatoni satr sifatida yoki ma'lumotlar to'g'ri bo'lsa null qaytaradi. FormState.validate() formaning barcha maydonlarini tekshirishni ishga tushiradi. Murakkab holatlar uchun reactive_forms paketi: maxsus validatorlar, asinxron tekshiruv, dinamik qoidalar. Flutter Web va mobil versiyalar bir xil API dan foydalanadi, bu esa xizmat ko'rsatishni soddalashtiradi.
// Flutter-da forma validatsiyasi namunasi
Form(
key: _formKey,
child: Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Email is required';
}
if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$')
.hasMatch(value)) {
return 'Enter a valid email';
}
return null;
},
),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// Process valid data
}
},
child: Text('Submit'),
),
],
),
)
Zamonaviy freymvorklar ehtiyojlarning 80% ini qoplaydigan ichki validatorlarni taqdim etadi. Qolgan 20% maxsus qoidalar, muntazam ifodalar yoki mavjudlarning kompozitsiyasini talab qiladi. Asosiy tamoyil — validatsiya deklarativ bo'lishi kerak, shunda uni oson o'qish, test qilish va qo'llab-quvvatlash mumkin. Kontrollerlar va ekranlar bo'ylab yoyilgan validatsiya mantig'idan qoching — uni alohida sinflarga yoki sxemalarga chiqaring.
| Vosita | Platforma | Xususiyatlar |
|---|---|---|
| Joi | Node.js | Deklarativ sxemalar, maxsus xabarlar |
| Pydantic | Python | Type hints, modelning avtomatik validatsiyasi |
| Zod | TypeScript | Type inference, qat'iy tiplash |
| javax.validation | Java | Bean Validation, @NotNull, @Size, @Pattern |
| FluentValidation | .NET | Fluent API, rulesets, shartli qoidalar |
White-list (oq ro'yxat) — qaysi ma'lumotlarga ruxsat berilganini aniqlaysiz, qolgan hammasi rad etiladi. Black-list — qaysi ma'lumotlar taqiqlanganini aniqlaysiz, qolgan hammasi o'tkaziladi. White-list har doim ishonchliroq: qaysi ma'lumotlar o'tishini aniq bilasiz. Black-list barcha mumkin bo'lgan hujumlarni oldindan ko'rishni talab qiladi, bu esa imkonsizdir. Misol: yoshni tekshirishda white-list (faqat 18 dan 120 gacha raqamlar) ishlating, black-list emas ("0", "-1", "999999" ni taqiqlash).
Muntazam ifodalar format validatsiyasi uchun samarali vositadir, lekin ular ReDoS-hujumlarining (Regular Expression Denial of Service) manbai bo'lishi mumkin. Ba'zi naqshlar (masalan, (a+)+b) uzun satrlarda katastrofik backtrackingga olib keladi va server protsessorini to'liq yuklaydi. Sinalgan regex-kutubxonalardan foydalaning va muntazam ifodani qo'llashdan oldin satr uzunligini cheklang. Murakkab holatlar uchun (email, URL) o'z muntazam ifodalaringizni yozish o'rniga tillarning ichki parserlaridan foydalaning.
Hatto tajribali dasturchilar ham validatsiyani amalga oshirishda xato qiladilar. Eng keng tarqalganlari: faqat mijoz tomonidagi validatsiya, haddan tashqari qattiq qoidalar (parol "Must contain uppercase, lowercase, digit, special char, >= 12 chars, must not repeat characters"), axborot bermaydigan xato xabarlari ("Error: invalid input") va chegaraviy holatlarni (boshida/oxirida bo'sh joylar, Unicode belgilar, bo'sh satrlar) e'tiborsiz qoldirish. Bu xatolarning har biri UX ni yomonlashtiradi va formalarning konversiyasini pasaytirishi mumkin.
if (value) bo'sh satrni noldan, false dan yoki "0" dan ajratmaydiEng yaxshi amaliyot — unit-testlar bilan qoplangan markazlashtirilgan validatsiya tizimi. Har bir qoida alohida tekshirilishi kerak: chegaraviy qiymatlar, to'g'ri ma'lumotlar, odatiy hujumlar (SQLi-urinishlar, XSS-payloads, juda uzun satrlar). Validatsiya bo'yicha regressiya testlari refaktoring paytida qoidalarning tasodifan zaiflashishining oldini oladi. Tasodifiy ma'lumotlarni yaratish va validatsiyaning istisno bilan ishlamay qolmasligini tekshirish uchun property-based testing (QuickCheck, fast-check) dan foydalaning.
Tez-tez so'raladigan savollar
Validatsiya noto'g'ri ma'lumotlarni rad etadi, sanitizatsiya esa ularni tozalaydi. Masalan, HTML-matn kiritilganda validatsiya maksimal uzunlikni tekshiradi, sanitizatsiya esa DOMPurify orqali script-teglarini olib tashlaydi. Ikkala jarayon ham majburiy: validatsiya — format nazorati uchun, sanitizatsiya — chiqish xavfsizligi uchun.
Yo'q, hech qachon. Mijoz validatsiyasi so'rovlarni tutish va o'zgartirish orqali oson chetlab o'tiladi. Burp Suite kabi vositalardan yoki shunchaki curl-dan foydalaning. Server validatsiyasi tizimni himoya qilishning yagona ishonchli usulidir. Mijoz validatsiyasi faqat foydalanuvchi tajribasini yaxshilashga xizmat qiladi.
file signature validation orqali MIME-turini (faqat kengaytmani emas), fayl hajmini, imzoni (fayl boshidagi sehrli baytlarni) tekshiring. Hech qachon kengaytmaga ishonmang — saqlashda fayl nomini o'zgartiring. Rasmlar uchun ularni server kutubxonasi (ImageMagick, Sharp) bilan qayta kodlang — bu EXIF-ma'lumotlaridan kiritilgan kodni olib tashlaydi.
ReDoS (Regular Expression Denial of Service) — hujumchi muntazam ifodada katastrofik backtracking keltirib chiqaradigan maxsus tuzilgan satrni yuboradigan hujum. Natijada server protsessori 100% yuklanadi va javob shakllanmaydi. Himoya: satr uzunligini cheklash, regex uchun vaqt chegaralari, sinalgan naqshlardan foydalanish.
Ha, agar ma'lumotlar WebView-da ko'rsatilsa yoki HTML-kontekstida ishlatilsa. Backend buzilgan bo'lsa, ma'lumotlar zararli kodni o'z ichiga olishi mumkin. Manbadan qat'i nazar, foydalanuvchiga ko'rsatiladigan istalgan ma'lumotni tekshiring va tozalang. Mobil ilovalarda bu ayniqsa gibrid komponentlar uchun muhimdir.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.