Parolni xavfsiz tiklash va akkauntni qayta tiklash: amaliy qo‘llanma
Amaliyot4 daqInnovialabs tahririyati
Qisqacha
Faqat xeshi saqlanadigan tasodifiy, bir martalik va qisqa muddatli token yuboring, akkaunt bor-yo‘qligidan qat’i nazar bir xil javob bering, so‘rovlarni cheklang, tiklashdan keyin barcha sessiyalarni yoping va tiklash 2FA ni o‘chirib yubormasin.
Qisqa javob
Xavfsiz parol tiklashning beshta xususiyati bor:
- Oldindan aytib bo‘lmaydigan token — kriptografik jihatdan ishonchli generatordan.
- Qisqa muddat va bir martalik: havola faqat bir marta va qisqa vaqt ishlaydi.
- Foydalanuvchilarni aniqlab bo‘lmaydi: email mavjud bo‘ladimi yoki yo‘qmi, javob bir xil.
- Havolani so‘rash va undan foydalanishga limitlar.
- Tiklashdan keyin tozalash: boshqa sessiyalar va tokenlar bekor qilinadi, foydalanuvchiga xabar boradi.
Akkauntni tiklash — tizimga kirishning muqobil yo‘li. Agar u asosiy kirishdan zaifroq bo‘lsa, hujumchi aynan shu yo‘ldan foydalanadi.
1-qadam: tokenni yaratish va saqlash
Ishonchli manbadan kamida 32 tasodifiy bayt oling — timestamp, foydalanuvchi ID yoki Math.random() emas. Bazada faqat tokenning xeshini saqlang, shunda baza sizib chiqsa ham ishlaydigan havolalar to‘plamiga aylanmaydi.
import crypto from "node:crypto";
const token = crypto.randomBytes(32).toString("base64url");
const tokenHash = crypto.createHash("sha256").update(token).digest("hex");
// saqlaymiz: user_id, token_hash, expires_at, used_at = null
// ochiq token faqat xatdagi havola ichida yuboriladi
Bu yerda oddiy SHA-256 yetarli: token uzun va tasodifiy. Sekin xesh funksiyalar odamlar o‘ylab topgan parollar uchun kerak.
2-qadam: muddat va bir martalik
- Qisqa muddat qo‘ying: kunlar emas, daqiqalar yoki bir soat.
- Tokenni atomar tarzda ishlatilgan deb belgilang, shunda ikkita parallel so‘rov ikkalasi ham o‘tib ketmaydi:
UPDATE password_resets
SET used_at = now()
WHERE token_hash = $1 AND used_at IS NULL AND expires_at > now()
RETURNING user_id;
- Yangi tiklash so‘ralganda shu foydalanuvchining eski ishlatilmagan tokenlarini bekor qiling.
- Tiklash sahifasida
Referrer-Policy: no-referrero‘rnating, shunda URL dagi token uchinchi tomon skriptlari va analitikaga sizib chiqmaydi.
3-qadam: foydalanuvchilarni aniqlashdan himoya
«Parolni unutdingizmi» formasi qaysi email ro‘yxatdan o‘tganini ko‘rsatmasligi kerak:
- Har doim bitta xabar: «Agar bu manzil bilan akkaunt mavjud bo‘lsa, ko‘rsatmalarni yubordik».
- Ikkala holatda ham javob vaqti o‘xshash bo‘lsin — xatni fon vazifasida yuborish yordam beradi.
- Ro‘yxatdan o‘tish formasi va kirish xatolari shu ma’lumotni boshqa yo‘l bilan oshkor qilmasligini tekshiring.
4-qadam: limitlar
Email/akkaunt va IP manzil bo‘yicha cheklang:
- xat so‘rovlarini — hech kim foydalanuvchi pochtasini va sizning pochta byudjetingizni to‘ldirib yubormasligi uchun;
- token yoki SMS kodni kiritish urinishlarini — qisqa kodni terib topib bo‘lmasligi uchun;
- CAPTCHA yoki kechikishni hammaga emas, faqat shubhali faollikda yoqing.
5-qadam: tiklashdan keyin nima bo‘ladi
- Yangi parolni parollar uchun mo‘ljallangan funksiya bilan xeshlang (Argon2id, bcrypt yoki scrypt).
- Barcha sessiyalar va refresh tokenlarni yoping, ehtimol joriysidan tashqari. Akkaunt o‘g‘irlangan bo‘lsa, hujumchini aynan shu chiqarib yuboradi.
- Qolgan tiklash tokenlarini bekor qiling.
- Xabar yuboring: «Parolingiz o‘zgartirildi. Agar bu siz bo‘lmasangiz, qo‘llab-quvvatlash xizmatiga yozing».
- 2FA yoqilgan bo‘lsa, foydalanuvchini avtomatik kiritmang — avval ikkinchi omil.
Email yoki SMS
| Kanal | Asosiy xavflar | Nima qilish kerak |
|---|---|---|
| Emaildagi havola | Buzilgan pochta, uzatib yuborilgan havola | Qisqa muddat, bir martalik, o‘zgarish haqida xabar |
| SMS kod | SIM swap, raqamning boshqaga berilishi, ushlab qolish | Urinishlarga qat’iy limit; qimmatli akkauntlar uchun SMS yagona omil bo‘lmasin |
| Qo‘llab-quvvatlash | Ijtimoiy muhandislik | Yozma tekshiruv tartibi, «shoshilinch» degan istisnolarsiz |
Tiklash uchun email yoki telefonni o‘zgartirish ham nozik amal: joriy parol yoki 2FA ni so‘rang va eski manzilga xabar yuboring.
Tiklash va 2FA
Parolni tiklash 2FA ni o‘chirmasligi kerak. Aks holda pochtaga kirish akkauntga to‘liq kirish beradi. Odatiy sxema:
- tiklash faqat parolni o‘zgartiradi, kirish uchun baribir ikkinchi omil kerak;
- ikkinchi omil yo‘qolgan bo‘lsa — 2FA sozlanganda berilgan zaxira kodlar;
- zaxira kodlar bo‘lmasa — sekin qo‘lda bajariladigan jarayon: shaxsni tekshirish, kutish davri va 2FA o‘chirilishidan oldin barcha ma’lum kontaktlarga xabar.
Ko‘p uchraydigan xatolar
- Muddatsiz yoki ko‘p marta ishlatiladigan tokenlar.
- Tokenlarni foydalanuvchi yozuvi yonida ochiq holda saqlash.
- «Email topilmadi» va «xat yuborildi» uchun turli xabarlar.
- Parol o‘zgargandan keyin eski sessiyalar ishlashda davom etadi.
- «Onangizning qizlik familiyasi» kabi maxfiy savollar — javoblar ko‘pincha ochiq yoki taxmin qilinadi.