Veb
Login himoyasi: brute-force, rate limit, OTP va sessiya xavfsizligi
Kirish sahifasi — tizimning eshigi. Parol tanlashga qarshi cheklovlar, OTP kodlari, parolni tiklash va sessiyani to'g'ri boshqarish bo'yicha amaliy tekshiruvlar.
· 8 daq. o'qish

Kirish sahifasi har qanday portal yoki kabinetning eng ko'p tekshiriladigan qismi. Ekspertiza ham, haqiqiy hujumchi ham avval shu yerga qaraydi: parolni tanlab bo'ladimi, foydalanuvchi bor-yo'qligini bilib bo'ladimi, OTP kodini aylanib o'tib bo'ladimi, chiqib ketgandan keyin sessiya yopiladimi. Quyida login oqimini bosqichma-bosqich ko'rib chiqamiz.
1. Brute-force va rate limit
Cheklovsiz login formasi parolni avtomatik tanlashga ochiq. Himoya bir necha qatlamdan iborat bo'lishi kerak:
- Akkaunt + IP bo'yicha cheklov. Faqat IP bo'yicha cheklash yetarli emas — hujumchi IP'larni almashtiradi. Faqat akkaunt bo'yicha cheklash esa haqiqiy foydalanuvchini bloklashga olib keladi. Ikkalasini birlashtiring.
- Umumiy cheklov. Bitta IP'dan ko'p akkauntlarga urinishlarni ham cheklang (parol purkash, password spraying).
- Bosqichli kechikish yoki CAPTCHA. Bir necha muvaffaqiyatsiz urinishdan keyin CAPTCHA so'rash yoki kutish vaqtini oshirish.
Laravel'da misol:
RateLimiter::for('login', function (Request $request) {
$login = Str::lower((string) $request->input('phone'));
return [
Limit::perMinute(5)->by($login.'|'.$request->ip()),
Limit::perMinute(30)->by($request->ip()),
];
});
Tekshirish oson: noto'g'ri parolni ketma-ket 10–15 marta yuboring va javob 429 ga o'tishini ko'ring. API orqali kirish (mobil ilova uchun) marshrutini ham alohida tekshiring — u ko'pincha unutiladi.
2. Foydalanuvchini aniqlab bo'lmasin
"Bunday foydalanuvchi topilmadi" va "Parol noto'g'ri" degan turli xabarlar hujumchiga qaysi login mavjudligini aytib qo'yadi (user enumeration). Bitta umumiy xabar ishlating: "Login yoki parol noto'g'ri". Parolni tiklash va ro'yxatdan o'tish sahifalarida ham xuddi shu tamoyil: "Agar bunday akkaunt bo'lsa, ko'rsatma yuborildi". Javob vaqtidagi katta farq ham ma'lumot beradi, shuning uchun mavjud bo'lmagan foydalanuvchi uchun ham parol xeshini tekshirish kodi bajarilgani ma'qul.
3. Parollarni saqlash
Parollar faqat moslashuvchan xesh funksiyalari bilan saqlanadi: bcrypt yoki Argon2id. MD5, SHA1 yoki "o'zimizning shifrlash" — yo'q. Laravel'da Hash::make() buni o'zi qiladi; eski tizimdan ko'chirilgan parollar bo'lsa, ular keyingi kirishda qayta xeshlanayotganini tekshiring. Minimal uzunlik va ma'lum sizib chiqqan parollar ro'yxati bo'yicha tekshiruv OWASP ASVS tavsiyalariga mos keladi.
4. OTP kodlari
SMS yoki ilova orqali bir martalik kod qo'shimcha himoya beradi, lekin uning o'zi ham to'g'ri qurilishi kerak:
- Amal qilish muddati qisqa — bir necha daqiqa.
- Urinishlar soni cheklangan. Olti xonali kodni cheklovsiz tanlash mumkin; 3–5 xato urinishdan keyin kod bekor qilinsin.
- Bir martalik. Ishlatilgan kod qayta qabul qilinmasin.
- Qayta yuborish cheklangan. Aks holda forma SMS yuborish xizmatiga aylanadi va hisobingizdan pul ketadi (SMS bombing).
- Javobda va logda kod yo'q. Test paytida API javobiga kodni qo'shib qo'yish va keyin olib tashlashni unutish — tez-tez uchraydigan xato.
- Kod akkauntga bog'langan. Bir foydalanuvchiga yuborilgan kod bilan boshqa akkauntga kirib bo'lmasin.
- Server tomonda tekshiriladi. Mobil ilovada "kod to'g'ri" degan qarorni klientga qoldirmang.
OTP — qo'shimcha qulf. Agar uni cheksiz tanlab bo'lsa, u qulf emas.
5. Parolni tiklash
Parolni tiklash oqimi ko'pincha logindan ham zaifroq bo'ladi. O'z mahsulotimiz ekspertizasida Host sarlavhasi orqali in'ektsiya aynan shu yerda xavfli edi: ilova X-Forwarded-Host ga ishongani uchun tiklash havolasi hujumchi domeni bilan yasalishi mumkin edi. Tuzatish — faqat X-Forwarded-For/Proto/Port sarlavhalariga ishonish va production'da asosiy URL'ni majburiy belgilash.
Qo'shimcha tekshiruvlar:
- tiklash tokeni tasodifiy, uzun va bir martalik;
- amal qilish muddati cheklangan;
- parol o'zgargach, boshqa barcha sessiyalar va tokenlar bekor qilinadi;
- tiklash so'rovlari ham rate limit ostida.
6. Sessiya xavfsizligi
Kirish muvaffaqiyatli bo'lgandan keyin xavfsizlik sessiyaga o'tadi:
- Login'dan keyin sessiya ID yangilansin (session fixation'ga qarshi). Laravel'da
$request->session()->regenerate(). - Chiqishda sessiya to'liq bekor qilinsin, faqat cookie o'chirilmasin:
invalidate()varegenerateToken(). - Cookie bayroqlari:
Secure,HttpOnly,SameSite=LaxyokiStrict. - Faolsizlik muddati. Moliyaviy va davlat tizimlarida qisqa idle timeout maqsadga muvofiq.
- Qurilmalar ro'yxati va "boshqa qurilmalardan chiqish" imkoniyati —
Auth::logoutOtherDevices().
Mobil ilovalarda sessiya tokeni oddiy SharedPreferences yoki UserDefaults da emas, Keystore/Keychain'da saqlanishi kerak. Bizning mobil ekspertizada shifrlanmagan saqlash yuqori darajali topilma bo'lgan va flutter_secure_storage bilan yopilgan. Chiqishda WebView ma'lumotlari ham tozalanadi.
7. Administratorlar uchun qo'shimcha qatlam
Admin panel oddiy foydalanuvchi kabinetidan kuchliroq himoyalanishi kerak: majburiy ikki bosqichli autentifikatsiya, iloji bo'lsa IP allowlist yoki VPN, alohida qisqa sessiya muddati. Admin panelni boshqa yo'lga ko'chirish o'zi himoya emas, lekin allowlist bilan birga avtomatik skanerlar shovqinini kamaytiradi.
8. Loglash va ogohlantirish
Muvaffaqiyatli va muvaffaqiyatsiz kirishlar, parol o'zgarishi, OTP xatolari va bloklashlar logga yozilsin — lekin parol va kodning o'zi emas. Bitta akkauntga yoki bitta IP'dan g'ayritabiiy ko'p urinishlar haqida ogohlantirish sozlang. Foydalanuvchiga yangi qurilmadan kirish haqida xabar yuborish ham foydali.
Qisqa tekshiruv
- 15 ta noto'g'ri urinish — 429 yoki CAPTCHA chiqadimi?
- Mavjud va mavjud bo'lmagan login uchun xabar bir xilmi?
- OTP'ni 10 marta noto'g'ri kiritish mumkinmi?
- Ishlatilgan OTP yoki tiklash havolasi qayta ishlaydimi?
- Chiqib ketgandan keyin eski cookie bilan sahifa ochiladimi?
- Parol o'zgargach, boshqa qurilmadagi sessiya yopiladimi?
Xulosa
Login himoyasi bitta funksiya emas, balki bir necha kichik qoidalar yig'indisi. Har birini alohida tekshirib chiqsangiz, ekspertizada eng ko'p e'tibor beriladigan qism tayyor bo'ladi.
Sipar login, OTP va sessiya oqimlarini ekspertizadan oldin tekshiradi va topilgan teshiklarni yopadi. Skanerlash so'rovini qoldiring.


