Zamonaviy veb va mobil ilovalar to'liq REST, GraphQL va gRPC APIlar orqali ishlaydi. Har bir tugma, avtorizatsiya va to'lov tranzaksiyasi ortida server API endpointi yotadi. Agar API to'g'ri himoyalanmasa, bitta buzg'unchi script soniyasiga 100,000 ta so'rov bilan serverni yiqitishi (DDoS), foydalanuvchilarning barcha ma'lumotlarini qirib olishi (Scraping) yoki so'rovlarni soxtalashtirishi mumkin. Bugungi darsda OWASP API Top 10 tahdidlari, Token Bucket / Leaky Bucket algoritmlari, Redis orqali taqsimlangan Rate Limiting va bank darajasidagi HMAC-SHA256 so'rov imzolashni amalda o'rganamiz.
| Zaiflik (OWASP) | Hujum Mexanizmi | Real Oqibati | Muhandislik Himoyasi |
|---|---|---|---|
| API1: BOLA / IDOR (Broken Object Level Auth) | Foydalanuvchi /api/orders/401 o'rniga /api/orders/402 deb boshqa odam hisobini so'raydi. | Begona mijozlarning barcha shaxsiy va moliyaviy ma'lumotlari sizib chiqadi. | Har bir so'rovda obyekt egasi sessiya tokeni egasi bilan solishtiriladi. |
| API4: Unrestricted Resource (Resurs chegarasi yo'qligi) | Cheklovsiz so'rovlar yuborish, millionlab sahifalarni paginatsiyasiz tortish. | Server protsessori 100% ga to'lib, xotira tugaydi va xizmat to'xtaydi (DoS). | Rate Limiting (Token Bucket) va qat'iy limit=50 paginatsiyasi. |
| API3: BOPLA / Mass Assign (Property Level Auth) | JSON tanasida qo'shimcha parametrlar: {"role": "admin", "balance": 999999} yuborish. | Oddiy foydalanuvchi o'zini bir soniyada tizim adminiga aylantiradi. | DTO (Data Transfer Object) oq ro'yxati (Whitelist validation: Zod, Joi). |
| Algoritm | Ishlash Mexanizmi | Kamchiligi (Tuzog'i) | Eng Yaxshi Foydalanish |
|---|---|---|---|
| Fixed Window Counter | Har daqiqada hisoblagich 0 dan boshlanadi. Masalan: 10:00 da 100 ta so'rov ruxsat etiladi. | Chegara effekti (Burst): 10:00:59 da 100 ta va 10:01:01 da yana 100 ta — 2 soniyada 200 ta so'rov o'tadi! | Oddiy, resurs kam talab qiladigan ichki keshlar. |
| Sliding Window Log | Har bir so'rovning vaqti (timestamp) xotirada (Redis ZSET) saqlanadi va oxirgi 60 soniya hisoblanadi. | Xotira sarfi yuqori: har bir so'rov uchun alohida yozuv (RAM O(N)). | Yuqori aniqlik talab qilinadigan moliyaviy tranzaksiyalar. |
| Token Bucket (Sanoat standarti) | Chelakka doimiy tezlikda (r) tokenlar tushadi. Har bir so'rov 1 ta tokenni oladi. Token tugasa — 429 xato. | Qisqa muddatli tezlik portlashiga (Burst) ruxsat beradi, ammo uzoq muddatli o'rtacha tezlikni ushlaydi. | AWS, Cloudflare, Stripe va Stripe API shlyuzlarining asosi. |
GET qilsa va keyin DECR qilsa, hisob adashadi.Authorization: Bearer my-secret-api-key yuborishadi.Method + Path + Timestamp + Nonce + Body birlashtiriladi.HMAC-SHA256 hisoblanadi.const crypto = require('crypto');
// 1. HMAC-SHA256 Request Signature Verification Middleware
function verifyHmacSignature(secretKey, nonceCache) {
return (req, res, next) => {
const signature = req.headers['x-signature'];
const timestamp = parseInt(req.headers['x-timestamp'], 10);
const nonce = req.headers['x-nonce'];
if (!signature || !timestamp || !nonce) {
return res.status(401).json({ error: 'Missing security headers' });
}
// Replay attack prevention: 5-minute validity window
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - timestamp) > 300) {
return res.status(401).json({ error: 'Request timestamp expired (Time Skew)' });
}
// Check if nonce was already consumed
if (nonceCache.has(nonce)) {
return res.status(401).json({ error: 'Replay attack detected: Nonce already used' });
}
nonceCache.add(nonce); // Store nonce in memory/Redis with TTL
// Build canonical string and recalculate HMAC
const payload = JSON.stringify(req.body || {});
const canonical = `${req.method}|${req.path}|${timestamp}|${nonce}|${payload}`;
const expectedSig = crypto.createHmac('sha256', secretKey).update(canonical).digest('hex');
// Constant-time comparison to prevent timing attacks
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSig))) {
return res.status(403).json({ error: 'Invalid HMAC signature: Payload tampered!' });
}
next();
};
}
RST_STREAM kadrini suiiste'mol qilib, ulanishni yopmasdan yangi so'rovlar oqimi yuborilgan.User-Agent: Mozilla/5.0 deb brauzerni soxtalashtirishi mumkin.requests yoki Golang mijozining TLS Handshake parametrlari (Cipher Suites, Extensions) haqiqiy Chrome brauzeridan mutlaqo farq qiladi!Brauzerda studio/index.html ni oching. Terminal yoki server o'rnatish shart emas! Jonli Token Bucket chelagi, DDoS hujumlari va WebCrypto HMAC-SHA256 imzolashni sinovdan o'tkazing.
| Kvest | Amal va Vazifa | Kutilayotgan Natija (Tekshirish) |
|---|---|---|
| 1-Kvest: Token Bo'shatish (2 Ball) | 1x So'rov tugmasini ketma-ket 10 marta bosing (Capacity: 10, Refill: 2/s). | Chelakdagi tokenlar 0 ga tushadi va birinchi HTTP 429 Too Many Requests bloklanadi. |
| 2-Kvest: 50 RPS DDoS Hujumi (3 Ball) | 50 RPS Portlash (DDoS) tugmasini bosing va 20 tadan ko'p so'rov bloklanishini kuzating. | Chelak to'lib-toshib ketadi, qonuniy limitdan oshgan barcha so'rovlar HTTP 429 bilan qaytariladi. |
| 3-Kvest: Soxtalashtirish (Tamper) (3 Ball) | HMAC tabida Soxtalashtirish (Tamper Attack) tugmasini bosing (summa $100 -> $999,999 ga aylanadi). | Kanonik xesh buziladi: Server HTTP 403 / 401 Signature Mismatch! deb so'rovni bekor qiladi. |
| 4-Kvest: Replay Attack (2 Ball) | Qonuniy yuborilgan so'rovdan so'ng Replay Attack Sinovi tugmasini bosing. | Server Nonce keshini ko'rib, HTTP 401 Replay Attack Detected: Nonce already consumed beradi. |
| Himoya Qatlami | To'xtatadigan Tahdidi | Bajarilish Nuqtasi | Kechikish (Latency) |
|---|---|---|---|
| mTLS / TLS 1.3 | Paketlarni tutish (Sniffing), MitM, ruxsatsiz mijoz ulanishi. | Transport darajasi (Reverse Proxy / Envoy). | < 1 ms (Handshake paytida 1 marta). |
| Distributed Rate Limiter | L7 DDoS, Brute-Force parol sindirish, Data Scraping. | API Gateway + Redis Lua Engine. | ~1–2 ms (In-memory Redis query). |
| HMAC-SHA256 Signing | So'rov parametrlarini o'zgartirish (Tampering), Replay Attack. | Ilova darajasi (Node.js / Go Middleware). | < 0.1 ms (Lokal kriptografik hisoblash). |
/api/v1/transfers endpointi uchun himoya tizimi arxitekturasini loyihalashtiring.