IlmHamroh
JavaScript Full-stack/28-qism. Autentifikatsiya va backend xavfsizligi3/31-dars19 daqiqa
Mundarija (30)

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-api dagi 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-api uchun OWASP xaritasini yozib, npm audit skriptini 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-api da RLS uchun joriy_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:

js
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:

text
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 Conditions

Uchinchi 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

  1. SSRF yo'qoldi — A01 ichiga kirdi. 2021-yilgi A10 Server-Side Request Forgery endi alohida toifa emas.
  2. A03 kengaydi. "Eski komponentlar" o'rniga "ta'minot zanjiri": nafaqat eski versiya, balki zararli paket, buzilgan build tizimi, imzosiz relizlar.
  3. A10 butunlay yangi. Xatolar va kutilmagan holatlarni boshqarish birinchi marta alohida toifa bo'ldi.
  4. 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| A

Diagrammaga 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:

  1. Parollar MD5 bilan saqlangan.
  2. Webhook manzili sifatida http://169.254.169.254/ berildi va server unga so'rov yubordi.
  3. left-pad o'rniga lefft-pad nomli zararli paket o'rnatildi.
  4. Xato bo'lganda javobga SQL so'rovi va jadval nomlari chiqadi.
  5. Login 10 000 marta ketma-ket sinaldi, server hech narsa qilmadi.
Yechim
  1. A04 Cryptographic Failures — parol uchun tez hash.
  2. A01 Broken Access Control — bu SSRF (169.254.169.254 — bulut serverlarining ichki metama'lumot manzili), 2025-yildan A01 ichida.
  3. A03 Software Supply Chain Failures — typosquatting.
  4. A10 Mishandling of Exceptional Conditions — xato holati ichki ma'lumotni oshkor qildi. Bir vaqtda A02 ham (debug rejimi prodakshnda).
  5. 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
js
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:

text
A10:2021 → A01:2025
A06:2021 → A03:2025
A02:2021 → A04:2025
A11:2021 → yo'q:2025

Ikki 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
js
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:

text
A01: 2 ta — begona vazifa, CSRF
A02: 1 ta — sukut parol
A04: 1 ta — MD5 parol
A10: 1 ta — stack trace javobda

Object.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:

text
## 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:

json
"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):

bash
npm run xavfsizlik:audit
text
> vazifalar-api@1.0.0 xavfsizlik:audit
> npm audit --omit=dev --audit-level=moderate

found 0 vulnerabilities

Nol — 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:

bash
npm run check

Kanon natijasi (2026-10-27): tip va lint xatosiz, testlar:

text
ℹ tests 112
ℹ suites 8
ℹ pass 111
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1

Bitta 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:

bash
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/:id boshqa 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-api da eng katta bo'shliq — A01 va A07: kimlik va ruxsat yo'q.
  • Xavfsizlik hujjati to'liq va commit qilindi; npm audit endi 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

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
OWASP Top 10:2025 xaritasi: eng keng tarqalgan 10 xavf va vazifalar-api — IlmHamroh