Mundarija (30)
- Bu darsda
- 1. Nega bu kerak?
- 2. Ro'yxat qanday tuziladi
- 2.1 Ma'lumot va so'rovnoma
- 2.2 Toifa — bitta xato emas
- 3. A01–A10:2025
- 3.1 Ro'yxat
- 3.2 A01–A05
- 3.3 A06–A10
- 4. 2021-yildan nima o'zgardi
- 4.1 O'rinlar siljishi
- 4.2 To'rtta muhim o'zgarish
- 5. vazifalar-api xaritasi
- 6. Top 10 dan keyin
- 6.1 OWASP API Security Top 10
- 6.2 ASVS — tekshiruv ro'yxati
- 6.3 Cheat Sheet Series — amaliy qo'llanmalar
- 7. Hujumchi nigohi
- 8. Ko'p uchraydigan xatolar
- 9. Mashqlar
- 1-mashq (oson): toifani toping
- 2-mashq (o'rta): 2021 → 2025
- 3-mashq (qiyin): xavfsizlik hisoboti
- 10. Loyiha qadami: OWASP xaritasi va commit
- 10.1 Hujjatning to'rtinchi bo'limi
- 10.2 Audit skripti
- 10.3 Tekshiruv va commit
- 11. Real ishda
- Xulosa
- Manbalar
OWASP Top 10:2025 xaritasi: eng keng tarqalgan 10 xavf va vazifalar-api
Qisqacha: OWASP Top 10 — veb-ilovalardagi eng keng tarqalgan 10 xavf toifasi ro'yxati, butun dunyo xavfsizlik bo'yicha "umumiy til" sifatida ishlatadi. 2025-yilgi nashrda birinchi o'rinda hamon A01 Broken Access Control (SSRF endi shu toifa ichida). Ikkita yangilik bor: A03 Software Supply Chain Failures (bog'liqliklar zanjiri) va butunlay yangi A10 Mishandling of Exceptional Conditions (xatolarni noto'g'ri boshqarish). Bu darsda har toifani
vazifalar-apidagi aniq joyga bog'laymiz va xavfsizlik hujjatini commit qilamiz.
Bu darsda
- OWASP nima ekanini va Top 10 ro'yxati qanday tuzilishini tushuntirasiz.
- A01–A10:2025 toifalarini nomi va misoli bilan aytib bera olasiz.
- 2021 va 2025 ro'yxatlari orasidagi farqni ko'rsatasiz.
- OWASP API Security Top 10, ASVS va Cheat Sheet Series nima uchun kerakligini bilasiz.
vazifalar-apiuchun OWASP xaritasini yozib,npm auditskriptini qo'shasiz va commit qilasiz.
Oldin bilishingiz kerak: Xavfsizlik nima: CIA, tahdid va hujumchi fikrlashi, Xavfsizlik tamoyillari, Ta'minot zanjiri xavfsizligi.
Oldingi ikki darsda vazifalar-api dagi teshiklarni o'z so'zlarimiz bilan nomladik: "kalitsiz o'qish", "superuser bilan ulanish". Lekin boshqa dasturchi, auditor yoki ish beruvchi bilan gaplashganda umumiy nomlar kerak. Bugun shu umumiy tilni o'rganamiz.
1. Nega bu kerak?
Shifokor tashxisni o'z so'zi bilan emas, xalqaro kod bilan yozadi. Shunda boshqa shahardagi shifokor ham, sug'urta kompaniyasi ham bir xil tushunadi. Xavfsizlikda ham shunday: "A01" desangiz, dunyodagi har bir xavfsizlik mutaxassisi gap nima haqida ekanini biladi.
OWASP (Open Worldwide Application Security Project) — ilovalar xavfsizligi bo'yicha xalqaro notijorat jamoa. U bepul qo'llanmalar, vositalar va ro'yxatlar chiqaradi. Eng mashhuri — OWASP Top 10: veb-ilovalardagi eng keng tarqalgan va eng xavfli 10 toifa.
Bu ro'yxat qayerda uchraydi:
- ish e'lonlarida: "OWASP Top 10 ni bilish";
- intervyuda: "A01 nima? Misol keltiring";
- kompaniya xavfsizlik talablarida va audit hisobotlarida;
- xavfsizlik skanerlarining natijalarida (har topilma yonida toifa kodi).
2. Ro'yxat qanday tuziladi
2.1 Ma'lumot va so'rovnoma
Top 10 — kimningdir fikri emas. U real ilovalarni tekshirish natijalaridan yig'iladi. Har topilgan zaiflik CWE (Common Weakness Enumeration — zaifliklarning xalqaro katalogi) raqami bilan belgilanadi. Masalan, XSS ning raqami — 79, SQL injection'niki — 89 (yozilishi: CWE-79, CWE-89).
OWASP rasmiy kirish sahifasiga ko'ra (2026-10-28 da o'qildi), 2025-yilgi nashr uchun:
- ma'lumotlar to'plamida 589 ta CWE tahlil qilindi;
- 10 toifa ichiga 248 tasi tushdi;
- toifalardan 8 tasi ma'lumotdan, 2 tasi mutaxassislar so'rovnomasidan tanlandi.
Nega ikkitasi so'rovnomadan? Chunki ma'lumot kechikadi: yangi turdagi hujumni avval topish, keyin unga CWE raqami berish, keyin skanerlarga o'rgatish kerak. So'rovnoma "hozir maydonda nima bo'layapti?" degan savolga javob beradi.
2.2 Toifa — bitta xato emas
Har toifa — bir oila. Masalan, A01 Broken Access Control ichida o'nlab CWE bor: boshqa odamning ma'lumotini ID orqali olish, oddiy foydalanuvchining admin sahifasiga kirishi, CSRF, endi esa SSRF ham. Shuning uchun "A01" — tashxis emas, yo'nalish: "ruxsat tekshiruvi bilan bog'liq muammo".
Maslahat: Top 10 — xabardorlik hujjati (awareness document), to'liq tekshiruv standarti emas. "Top 10 dagi hamma narsa yopilgan" — "ilova xavfsiz" degani emas. Tekshiruv ro'yxati uchun ASVS bor — u haqda «Top 10 dan keyin» bo'limida.
3. A01–A10:2025
3.1 Ro'yxat
Rasmiy nomlar inglizcha. Biz ularni o'zgartirmaymiz — ish e'lonida va hisobotda aynan shunday uchraydi. Yonida — o'zbekcha ma'nosi va vazifalar-api dagi joyi.
| Kod | Nomi | Ma'nosi | vazifalar-api da |
|---|---|---|---|
| A01 | Broken Access Control | ruxsat tekshiruvi buzilgan | begona vazifa, CSRF, RLS, webhook URL |
| A02 | Security Misconfiguration | noto'g'ri sozlama | CORS, helmet, superuser ulanish |
| A03 | Software Supply Chain Failures | bog'liqliklar zanjiri | package-lock.json, npm audit |
| A04 | Cryptographic Failures | kriptografiya xatolari | parol hash'i, token, cookie |
| A05 | Injection | kod yoki buyruq qo'shish | SQL parametrlari, sarlavhalar |
| A06 | Insecure Design | loyihadagi xavfli qaror | email borligini oshkor qilish |
| A07 | Authentication Failures | kimlikni tasdiqlash xatolari | login, sessiya, ikki faktor |
| A08 | Software or Data Integrity Failures | yaxlitlik tekshirilmagan | imzosiz kursor, webhook imzosi |
| A09 | Security Logging and Alerting Failures | jurnal va ogohlantirish yo'q | kirish urinishlari jurnali |
| A10 | Mishandling of Exceptional Conditions | xato holatlar noto'g'ri | catch dagi ochiq yiqilish |
Endi har toifani qisqa misol bilan ko'ramiz.
3.2 A01–A05
A01 Broken Access Control — foydalanuvchi o'ziga ruxsat berilmagan narsani qila oladi. Eng oddiy shakli: GET /v1/vazifalar/7 — 7-vazifa kimniki ekanini tekshirmaslik. Buni IDOR yoki API dunyosida BOLA deyishadi — RBAC va resurs egaligi darsida batafsil. Oldingi darsdagi "begona origin'dan DELETE → 204" ham shu toifa.
SSRF (Server-Side Request Forgery) — hujumchi serveringizni o'zi tanlagan manzilga so'rov yuborishga majburlaydi. Masalan, webhook manzili sifatida http://127.0.0.1:5432 beradi va server o'z ichki bazasini "taqillatadi". 2021-yilda u alohida A10 edi. 2025-yilda OWASP uni A01 ga qo'shdi: mohiyatan bu ham "server kimga so'rov yuborishga ruxsat bor" degan ruxsat tekshiruvi. Batafsil — SSRF va tashqi URL'lar bilan ishlash.
A02 Security Misconfiguration — kod to'g'ri, lekin sozlama noto'g'ri: sukut parollar, keraksiz ochiq port, cors: "*", debug rejimi prodakshnda. 2021-yilda 5-o'rinda edi, endi 2-o'rinda. Sabab tushunarli: zamonaviy ilova o'nlab sozlamaga tayanadi (bulut, konteyner, proxy), har biri xato bo'lishi mumkin. Oldingi darsdagi "sukut bo'yicha xavfsiz" tamoyili aynan shunga qarshi.
A03 Software Supply Chain Failures — siz yozmagan kod orqali hujum: zararli npm paket, buzilgan paket versiyasi, egasi akkauntini yo'qotgan kutubxona, CI tizimining buzilishi. 2021-yildagi "Vulnerable and Outdated Components" (eski versiyalar) toifasining kengaytmasi. Ta'minot zanjiri xavfsizligi darsida npm audit, lock fayl va typosquatting'ni ko'rgansiz. vazifalar-api da 10 ta prod bog'liqlik bor — har biri sizning kodingiz qatorida ishlaydi.
A04 Cryptographic Failures — maxfiy ma'lumot yetarli himoyalanmagan: parol oddiy SHA-256 bilan, HTTPS yo'q, kalit kodda yozilgan, eski algoritm. Keyingi dars — Parolni xavfsiz saqlash — aynan shu toifa.
A05 Injection — foydalanuvchi matni kod sifatida bajariladi: SQL injection, buyruq qatoriga qo'shish, HTML'ga qo'shish (XSS ham shu yerda). Parametrli so'rovlar va SQL injection darsida asosiy himoyani qo'yganmiz. Backend'dagi boshqa turlari — Backend'dagi injection va mass assignment.
3.3 A06–A10
A06 Insecure Design — kod to'g'ri yozilgan, lekin g'oyaning o'zi xavfli. Masalan, ro'yxatdan o'tishda "bu email band" deyish. Kod xatosiz, lekin hujumchi shu javob orqali qaysi emaillar saytda borligini bilib oladi. Bunday muammoni tuzatish uchun kodni emas, oqimni qayta o'ylash kerak.
A07 Authentication Failures — "kim ekansiz?" savoliga noto'g'ri javob: zaif parollarga ruxsat, cheksiz login urinishlari, sessiya chiqishda yopilmaydi. 2021-yilda nomi "Identification and Authentication Failures" edi. 28-qismning katta qismi shu toifa haqida.
A08 Software or Data Integrity Failures — ma'lumot yoki kod o'zgarmaganini tekshirmaslik. vazifalar-api dagi misol: sahifalash kursori — oddiy base64 JSON (Pagination). Mijoz uni ochib, o'zgartirib qaytara oladi. Imzo (HMAC) bilan himoyalash — RBAC va resurs egaligi darsida. Imzosiz webhook ham shu toifa.
A09 Security Logging and Alerting Failures — hujum bo'lyapti, lekin hech kim bilmaydi. Jurnal (log) yo'q yoki bor, lekin hech kim qaramaydi. 2025-yilda nomiga "Alerting" (ogohlantirish) so'zi qo'shildi: faqat yozib qo'yish yetmaydi, odamga xabar borishi kerak. Login urinishlari jurnali Ro'yxat va login oqimi darsida paydo bo'ladi.
A10 Mishandling of Exceptional Conditions — butunlay yangi toifa. Ilova kutilmagan holatda noto'g'ri yo'l tanlaydi: xato javobida ichki ma'lumot chiqadi, catch ichida ruxsat beriladi (ochiq yiqilish), tranzaksiya yarmida to'xtab qoladi, resurs tugaganda server qulaydi. Oldingi darsdagi ruxsatBormiOchiq — shu toifaning darslik misoli. vazifalar-api bu yerda yaxshi holatda: xato javoblari Problem Details formatida, stack trace yo'q.
Tekshirib ko'ring:
vazifalar-apida RLS uchunjoriy_foydalanuvchi()o'rnatilmasa 0 qator qaytadi. Bu qaysi toifaga himoya va nega?
Javob
Asosan A01 (begona ma'lumotga kirish yo'q) va A10 (kutilmagan holat — foydalanuvchi o'rnatilmagan — xavfsiz yo'l bilan hal qilindi: "hech narsa ko'rsatma"). Bitta himoya bir nechta toifaga tegishi tabiiy — toifalar bir-birini kesib o'tadi.
4. 2021-yildan nima o'zgardi
4.1 O'rinlar siljishi
2025-yilgi ro'yxatni 2021-yilgi bilan solishtiramiz. Har qatorda: 2025 kodi, necha o'rin ko'tarilgani (+) yoki tushgani (-), nomi:
const TOP2025 = [
["A01", "Broken Access Control", "A01"],
["A02", "Security Misconfiguration", "A05"],
["A03", "Software Supply Chain Failures", "A06"],
["A04", "Cryptographic Failures", "A02"],
["A05", "Injection", "A03"],
["A06", "Insecure Design", "A04"],
["A07", "Authentication Failures", "A07"],
["A08", "Software or Data Integrity Failures", "A08"],
["A09", "Security Logging and Alerting Failures", "A09"],
["A10", "Mishandling of Exceptional Conditions", null],
];
const raqam = (kod) => Number(kod.slice(1));
for (const [kod, nom, eski] of TOP2025) {
let belgi = "yangi";
if (eski !== null) {
const farq = raqam(eski) - raqam(kod);
belgi = farq > 0 ? `+${farq}` : farq < 0 ? `${farq}` : "=";
}
console.log(kod, belgi.padStart(5), nom);
}Konsolda:
A01 = Broken Access Control
A02 +3 Security Misconfiguration
A03 +3 Software Supply Chain Failures
A04 -2 Cryptographic Failures
A05 -2 Injection
A06 -2 Insecure Design
A07 = Authentication Failures
A08 = Software or Data Integrity Failures
A09 = Security Logging and Alerting Failures
A10 yangi Mishandling of Exceptional ConditionsUchinchi massiv elementi — shu toifaning 2021-yildagi kodi; null — 2021-yilda bunday toifa yo'q edi. kod.slice(1) — "A05" dan "05", Number esa 5 qiladi.
4.2 To'rtta muhim o'zgarish
- SSRF yo'qoldi — A01 ichiga kirdi. 2021-yilgi A10 Server-Side Request Forgery endi alohida toifa emas.
- A03 kengaydi. "Eski komponentlar" o'rniga "ta'minot zanjiri": nafaqat eski versiya, balki zararli paket, buzilgan build tizimi, imzosiz relizlar.
- A10 butunlay yangi. Xatolar va kutilmagan holatlarni boshqarish birinchi marta alohida toifa bo'ldi.
- Ikki nom o'zgardi. A07 dan "Identification" so'zi tushdi, A09 da "Monitoring" o'rniga "Alerting".
Ro'yxatni kim, qachon tuzgani ham muhim. OWASP 2025-yilgi nashrni 2025-yil noyabrida taqdim etgan (ikkinchi darajali manbalarga ko'ra, nomzod versiya 6-noyabrda chiqqan). Rasmiy sahifada aniq chiqish sanasi yozilmagan — shuning uchun darsda kun bo'yicha da'vo qilmaymiz.
Tekshirib ko'ring: Nega SSRF ni "ruxsat tekshiruvi" oilasiga qo'shish mantiqli?
Javob
SSRF'da hujumchi serverga "mana bu manzilga so'rov yubor" deydi va server bajaradi. Muammo — server "bu manzilga so'rov yuborishga menga ruxsat bormi?" deb tekshirmagan. Ya'ni bu ham ruxsat tekshiruvi yo'qligi, faqat foydalanuvchi emas, server nomidan.
5. vazifalar-api xaritasi
So'rov vazifalar-api dan o'tadigan yo'lni chizamiz va har bosqichda qaysi toifalar xavf tug'dirishini belgilaymiz:
flowchart TD
B[Brauzer] -->|A01 CSRF| E[Express kirish]
E -->|A02 CORS, helmet| A[Login, sessiya]
A -->|A07, A04 parol| R[Ruxsat: egalik]
R -->|A01 IDOR| Z[Zod validatsiya]
Z -->|A05 injection| D[(Postgres)]
R --> W[Webhook URL]
W -->|A01 SSRF| T[Tashqi server]
E -.->|A10 xato javobi| B
N[npm paketlar] -.->|A03| E
J[Jurnal] -.->|A09| ADiagrammaga qarang: A01 uch joyda uchraydi — brauzer chegarasida (CSRF), egalik tekshiruvida va tashqi so'rovda (SSRF). Shuning uchun u birinchi o'rinda. A03 esa yo'lning ichida emas — u butun ilovaning ostida yotadi: har paket Express ichida ishlaydi.
Oldingi darslarda o'lchangan kuzatuvlarni ham toifalarga ajratamiz:
| Kuzatuv | Toifa | Qayerda yopiladi |
|---|---|---|
kalitsiz GET /v1/vazifalar |
A01, A07 | Session-based auth |
begona origin'dan DELETE → 204 |
A01 | Tokenni qayerda saqlash va CSRF |
| 300 so'rov — 429 yo'q | API4 | Tezlik cheklovi |
| API superuser bilan ulanadi | A01, A02 | RBAC va resurs egaligi |
| kursor imzosiz | A08 | RBAC va resurs egaligi |
npm audit — 0 |
A03 | hozir: skript qo'shamiz |
Uchinchi qatordagi API4 — boshqa ro'yxatdan. Keyingi bo'limda u bilan tanishamiz.
6. Top 10 dan keyin
6.1 OWASP API Security Top 10
Veb-sahifa va API'ning xavflari bir-biriga o'xshaydi, lekin farqi ham bor. API'da HTML yo'q, lekin obyektlar, ID'lar va ommaviy so'rovlar ko'p. Shuning uchun OWASP API'lar uchun alohida ro'yxat chiqargan — OWASP API Security Top 10:2023. Uning birinchi to'rttasi:
| Kod | Nomi | Ma'nosi |
|---|---|---|
| API1 | Broken Object Level Authorization | begona obyektga ID orqali kirish (BOLA) |
| API2 | Broken Authentication | kimlikni tasdiqlash xatolari |
| API3 | Broken Object Property Level Authorization | obyektning ruxsatsiz maydonini o'qish/yozish |
| API4 | Unrestricted Resource Consumption | cheklovsiz resurs sarfi |
vazifalar-api — API, shuning uchun ikkala ro'yxat ham kerak. 300 ta so'rov va 429 yo'qligi — API4. To'liq ro'yxat va kanonning API auditi — qism oxiridagi OWASP API Security Top 10 darsida.
6.2 ASVS — tekshiruv ro'yxati
Top 10 "nimadan qo'rqish kerak"ni aytadi. ASVS (Application Security Verification Standard) esa "nimani tekshirish kerak"ni aytadi: yuzlab aniq talab, masalan "parollar kamida N belgi", "sessiya chiqishda bekor qilinadi". Talablar uch darajaga (level) bo'lingan: oddiy ilovadan bank tizimigacha. Joriy barqaror versiya — ASVS 5.0.0, 2025-yil 30-mayda chiqqan (asvs.owasp.org, 2026-10-28 da o'qildi).
Kompaniyalar ASVS'dan shunday foydalanadi: "bizning ilova 2-daraja talablariga javob berishi kerak" deb yozadi va har talabni test bilan tekshiradi.
6.3 Cheat Sheet Series — amaliy qo'llanmalar
OWASP Cheat Sheet Series — har mavzu bo'yicha qisqa amaliy qo'llanmalar to'plami: parol saqlash, sessiya, CSRF, fayl yuklash va boshqalar. Bu qismda ularga tez-tez tayanamiz. Masalan, keyingi darsdagi argon2 parametrlari aynan "Password Storage Cheat Sheet" dan.
| Hujjat | Savol | Qachon ochasiz |
|---|---|---|
| Top 10 | nimadan qo'rqish kerak? | umumiy rasm, o'qitish |
| API Security Top 10 | API'da nimadan? | API loyihalash va audit |
| ASVS | nimani tekshirish kerak? | talab yozish, test, audit |
| Cheat Sheet | qanday to'g'ri qilinadi? | kod yozayotganda |
7. Hujumchi nigohi
Hujumchi ro'yxatni teskari o'qiydi: sizda qaysi toifa ochiq qolganini qidiradi. Jadvalda u sinab ko'radigan birinchi narsalar, ularga qarshi himoya va himoyani tekshiradigan test:
| Hujum | Toifa | Himoya | Test: kutilgan javob |
|---|---|---|---|
GET /v1/vazifalar/1, /2 … |
A01 / API1 | egalik tekshiruvi | begona vazifa → 404 |
/.env, /debug |
A02 | keraksiz yo'l yo'q | → 404, ma'lumotsiz |
| eski paketdagi zaiflik | A03 | lock fayl, audit | npm audit → 0 |
| buzuq JSON, katta tana | A10 | xato ishlovchi | 400/413, stack trace yo'q |
| 1 000 marta login | A07, API4 | tezlik cheklovi | limitdan keyin → 429 |
Kanon tajribasida vazifalar-api ikkinchi, uchinchi va to'rtinchi qatorlarga bardosh berdi: /.env → 404, npm audit — 0, xato javoblari toza. Birinchi va oxirgisiga — yo'q. Bu qism shu ikki qatorni yopadi.
8. Ko'p uchraydigan xatolar
| Xato | Nega noto'g'ri | To'g'risi |
|---|---|---|
| "Top 10 ni yopdik — ilova xavfsiz" | Top 10 — xabardorlik ro'yxati | ASVS talablari va testlar |
| 2021-yilgi ro'yxat bilan ishlash | SSRF va A03/A10 boshqacha | 2025 nashri |
| toifa nomini tarjima qilib yozish | hisobotda topib bo'lmaydi | rasmiy nom + izoh |
| "biz API'miz, veb Top 10 bizga emas" | ikkalasi ham tegishli | Top 10 + API Top 10 |
npm audit ni bir marta ishga tushirish |
yangi zaifliklar har kuni chiqadi | skript, CI'da muntazam |
9. Mashqlar
Mashqlar kurs/mashqlar/28/03-owasp/ da.
1-mashq (oson): toifani toping
Har holat uchun 2025-yilgi toifa kodini yozing:
- Parollar MD5 bilan saqlangan.
- Webhook manzili sifatida
http://169.254.169.254/berildi va server unga so'rov yubordi. left-pado'rnigalefft-padnomli zararli paket o'rnatildi.- Xato bo'lganda javobga SQL so'rovi va jadval nomlari chiqadi.
- Login 10 000 marta ketma-ket sinaldi, server hech narsa qilmadi.
Yechim
- A04 Cryptographic Failures — parol uchun tez hash.
- A01 Broken Access Control — bu SSRF (
169.254.169.254— bulut serverlarining ichki metama'lumot manzili), 2025-yildan A01 ichida. - A03 Software Supply Chain Failures — typosquatting.
- A10 Mishandling of Exceptional Conditions — xato holati ichki ma'lumotni oshkor qildi. Bir vaqtda A02 ham (debug rejimi prodakshnda).
- A07 Authentication Failures (API ro'yxatida — API4).
2-mashq (o'rta): 2021 → 2025
yangiToifa(eski) funksiyasini yozing: 2021-yilgi kodni ("A01" … "A10") olib, uning 2025-yildagi kodini qaytarsin. Ro'yxatda yo'q kod uchun null. Kalitni Object.hasOwn bilan tekshiring (oldingi darsdagi ruxsat ro'yxati qoidasi). To'rtta kodni sinang: A10, A06, A02, A11. Ishora: xaritani darsdagi «O'rinlar siljishi» jadvalidan teskari yig'ing; 2021 A10 (SSRF) → 2025 A01.
Yechim
const KOCHISH = {
A01: "A01", A02: "A04", A03: "A05", A04: "A06", A05: "A02",
A06: "A03", A07: "A07", A08: "A08", A09: "A09", A10: "A01",
};
function yangiToifa(eski) {
if (!Object.hasOwn(KOCHISH, eski)) return null;
return KOCHISH[eski];
}
for (const kod of ["A10", "A06", "A02", "A11"]) {
console.log(`${kod}:2021 → ${yangiToifa(kod) ?? "yo'q"}:2025`);
}Konsolda:
A10:2021 → A01:2025
A06:2021 → A03:2025
A02:2021 → A04:2025
A11:2021 → yo'q:2025Ikki kalit bitta qiymatga olib boradi: 2021 A01 ham, A10 ham — 2025 A01. Teskari yo'nalishda (2025 → 2021) bunday xarita ishlamaydi: A10:2025 ning 2021-yilda juftligi yo'q.
3-mashq (qiyin): xavfsizlik hisoboti
hisobot(topilmalar) funksiyasini yozing. Kirish — { nom, toifa } obyektlari massivi. Qaytarsin: toifa kodi bo'yicha saralangan qatorlar, har biri A01: 2 ta — begona vazifa, CSRF ko'rinishida (shu toifadagi nomlar vergul bilan). Beshta topilmada sinang: begona vazifa (A01), sukut parol (A02), CSRF (A01), MD5 parol (A04), stack trace javobda (A10). Ishora: Object.groupBy (Guruhlash), Object.keys(...).toSorted().
Yechim
function hisobot(topilmalar) {
const guruh = Object.groupBy(topilmalar, (t) => t.toifa);
return Object.keys(guruh)
.toSorted()
.map((toifa) => {
const nomlar = guruh[toifa].map((t) => t.nom);
return `${toifa}: ${nomlar.length} ta — ${nomlar.join(", ")}`;
});
}
const qatorlar = hisobot([
{ nom: "begona vazifa", toifa: "A01" },
{ nom: "sukut parol", toifa: "A02" },
{ nom: "CSRF", toifa: "A01" },
{ nom: "MD5 parol", toifa: "A04" },
{ nom: "stack trace javobda", toifa: "A10" },
]);
for (const q of qatorlar) console.log(q);Konsolda:
A01: 2 ta — begona vazifa, CSRF
A02: 1 ta — sukut parol
A04: 1 ta — MD5 parol
A10: 1 ta — stack trace javobdaObject.groupBy bir xil toifadagi topilmalarni bitta massivga yig'adi. Kodlar bir xil uzunlikda (A01 … A10), shuning uchun oddiy satr saralash to'g'ri tartib beradi. A1, A10 kabi har xil uzunlikdagi kodlarda bu ishlamas edi ("A10" < "A2").
10. Loyiha qadami: OWASP xaritasi va commit
10.1 Hujjatning to'rtinchi bo'limi
docs/XAVFSIZLIK.md ning oxiriga OWASP xaritasini qo'shing. Kanon jadvalida uchinchi ustunda 28-qism dars raqamlari turibdi — biz ularni mavzu nomi bilan almashtirdik:
## 4. OWASP Top 10:2025 xaritasi (top10.owasp.org/2025)
| Toifa | vazifalar-api'da qayer | 28-qism mavzusi |
|---|---|---|
| A01 Broken Access Control (SSRF ham shu yerda) | egalik (IDOR), CSRF, RLS, admin yo'llari, webhook URL | CSRF, RBAC, API kalitlar, SSRF |
| A02 Security Misconfiguration | CORS, helmet/CSP, superuser ulanish, sukut sozlamalar | helmet, CORS, rollar |
| A03 Software Supply Chain Failures | `package-lock.json`, `npm audit`, aniq versiyalar, 7 kun qoidasi | OWASP xaritasi, auth kutubxonalari |
| A04 Cryptographic Failures | parol hash, token hash, cookie, JWT imzo, TOTP siri | parol, sessiya, JWT, 2FA |
| A05 Injection | SQL (parametrlar), log/header injection, prototype pollution | injection |
| A06 Insecure Design | enumeration, lockout, reset oqimi, SMS pumping | login, tiklash, OTP, CAPTCHA |
| A07 Authentication Failures | login, sessiya, MFA, passkey | parol … passkeys |
| A08 Software or Data Integrity Failures | imzolangan kursor, webhook HMAC, Telegram hash, JWT `alg` | Telegram, RBAC, API kalitlar |
| A09 Security Logging and Alerting Failures | kirish urinishlari, audit (`vazifa_tarixi.kim_id`), pino redact | login, sessiya, API audit |
| A10 Mishandling of Exceptional Conditions | xato ishlovchi, "fail closed" (RLS NULL → 0 qator), timeout'lar | DoS, API audit |
API'larga xos ro'yxat (OWASP API Security Top 10:2023) — alohida hujjat."7 kun qoidasi" — yangi chiqqan paket versiyasini kamida bir hafta o'rnatmaslik: zararli versiyalar odatda shu muddat ichida topilib, o'chiriladi. Bu haqda Auth kutubxonalari va xizmatlari darsida.
Endi hujjat to'liq: aktivlar, ishonch chegaralari, hujum yuzasi va OWASP xaritasi.
10.2 Audit skripti
package.json ning scripts bo'limiga bitta qator qo'shing:
"xavfsizlik:audit": "npm audit --omit=dev --audit-level=moderate"--omit=dev— faqat prodakshnga ketadigan bog'liqliklar. Test vositalaridagi zaiflik serverda ishlamaydi.--audit-level=moderate— o'rtacha va undan jiddiy zaiflik topilsa, buyruq xato kodi bilan tugaydi. Keyinchalik CI shu kodga qarab to'xtaydi.
Ishga tushiramiz (biz ishga tushirdik, 2026-10-28, Node 24.21.0, npm 11.19.0, kanon package-lock.json):
npm run xavfsizlik:audit> vazifalar-api@1.0.0 xavfsizlik:audit
> npm audit --omit=dev --audit-level=moderate
found 0 vulnerabilitiesNol — bugun uchun. Ertaga biror paketda zaiflik topilsa, xuddi shu buyruq uni ko'rsatadi. Shuning uchun u skript bo'lib turadi, bir martalik buyruq emas.
10.3 Tekshiruv va commit
Kod o'zgarmadi, faqat hujjat va skript. Baribir loyiha tekshiruvini ishga tushiring — hech narsa buzilmaganiga ishonch hosil qiling:
npm run checkKanon natijasi (2026-10-27): tip va lint xatosiz, testlar:
ℹ tests 112
ℹ suites 8
ℹ pass 111
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1Bitta o'tkazilgan test — Docker talab qiladigan Testcontainers to'plami (Testcontainers); u faqat TESTCONTAINERS=1 bilan ishlaydi. Sizda lokal Postgres yoki Redis ishlamayotgan bo'lsa, ularga bog'liq to'plamlar ham "skipped" bo'ladi — bu xato emas.
Endi uch darsda yig'ilgan ishni commit qiling. Xabar uzun, shuning uchun uni ikki qismda yig'amiz:
M='docs: xavfsizlik modeli — aktivlar, ishonch chegaralari,'
M+=' hujum yuzasi, OWASP Top 10:2025 xaritasi'
git add docs/XAVFSIZLIK.md package.json
git commit -m "$M"11. Real ishda
- Xavfsizlik skanerlari (SAST — kodni tekshiruvchi, DAST — ishlab turgan ilovani tekshiruvchi) har topilmani CWE va OWASP toifasi bilan belgilaydi. Hisobotni o'qish uchun shu kodlarni bilish kerak.
- Pentest hisoboti odatda "A01 — yuqori xavf —
GET /orders/:idboshqa mijoz buyurtmasini qaytaradi" ko'rinishida yoziladi. - Ish e'lonlari va intervyu: "OWASP Top 10 ni sanab bering", "IDOR va BOLA farqi?", "SSRF nima va 2025-yilda qayerga ko'chdi?".
- Ko'p kompaniyalar talab hujjatlarida ASVS darajasini ko'rsatadi.
Xulosa
- OWASP Top 10 — eng keng tarqalgan 10 xavf toifasi, xavfsizlikning "umumiy tili".
- 2025: A01 Broken Access Control hamon birinchi, SSRF uning ichida; A02 Misconfiguration 5-o'rindan 2-ga ko'tarildi.
- Yangi: A03 Software Supply Chain Failures (kengaytirilgan) va A10 Mishandling of Exceptional Conditions.
- Top 10 — xabardorlik ro'yxati; tekshiruv uchun ASVS 5.0, amaliyot uchun Cheat Sheet Series, API uchun API Security Top 10:2023.
vazifalar-apida eng katta bo'shliq — A01 va A07: kimlik va ruxsat yo'q.- Xavfsizlik hujjati to'liq va commit qilindi;
npm auditendi skript.
Keyingi dars: Parolni xavfsiz saqlash — A04 toifasiga birinchi qadam: crypto.argon2 bilan parol hash'i, PHC satri, bcrypt'ning 72 bayt tuzog'i va bazadagi himoya.
Manbalar
- OWASP Top 10:2025: https://top10.owasp.org/2025 va kirish sahifasi https://top10.owasp.org/2025/0x00_2025-Introduction/ (2026-10-28 da o'qildi)
- OWASP API Security Top 10:2023: https://api-security.owasp.org/editions/2023/en/0x11-t10/ (2026-10-28 da o'qildi)
- OWASP ASVS 5.0.0 (2025-05-30): https://asvs.owasp.org/
- OWASP Cheat Sheet Series: https://cheatsheetseries.owasp.org/
- CWE: https://cwe.mitre.org/
- 2025 nashrining taqdimot sanasi (ikkinchi darajali manbalar): Fastly blogi https://www.fastly.com/blog/new-2025-owasp-top-10-list-what-changed-what-you-need-to-know, SD Times https://sdtimes.com/security/owasp-top-10-updated-after-four-years-with-many-of-the-same-concerns-still-impacting-applications/
- Kanon (IlmHamroh, 2026-10-27):
docs/XAVFSIZLIK.md, tekshiruv natijasi; audit skripti — biz ishga tushirdik (2026-10-28).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!