Asosiy kontentga o‘tish
Innovialabs

API xavfsizligi: dasturchi uchun eng yaxshi amaliyotlar chek-listi

Amaliyot4 daq

Qisqacha

Xavfsiz API har bir so‘rovni autentifikatsiya qiladi, foydalanuvchining har bir aniq obyekt va maydonga huquqini serverda tekshiradi, kiritilgan ma’lumotni qat’iy sxemalar bo‘yicha validatsiya qiladi, so‘rovlar hajmini cheklaydi va xavfsizlik hodisalarini loglaydi.

Qisqa javob

API’dagi jiddiy zaifliklarning aksariyati g‘ayrioddiy emas. API shunchaki mijozga haddan tashqari ishonadi: ID to‘g‘ri bo‘lgani uchun obyektni qaytaradi, so‘rov tanasidagi barcha maydonlarni saqlaydi yoki cheksiz so‘rovlarga ruxsat beradi. OWASP API Security Top 10 shu andozalarni jamlaydi. Quyidagi chek-listdan ishlab chiqish va kod review paytida foydalaning.

OWASP API Top 10 bitta jadvalda

XavfNima noto‘g‘ri ketadiNima qilish kerak
API1 Broken Object Level AuthorizationFoydalanuvchi /orders/123 ni /orders/124 ga o‘zgartirib, boshqaning buyurtmasini ko‘radiHar bir obyekt egasini serverda tekshirish
API2 Broken AuthenticationZaif tokenlar, terib ko‘rishdan himoya yo‘q, muddatsiz tokenlarSinalgan kutubxonalar, qisqa muddatli tokenlar, kirishga limitlar
API3 Broken Object Property Level AuthorizationAPI ortiqcha maydonlarni qaytaradi yoki role, balance ni o‘rnatishga ruxsat beradiKirish va javob uchun aniq sxemalar
API4 Unrestricted Resource ConsumptionSo‘rovlar, sahifa hajmi, fayl hajmiga limit yo‘qRate limit, paginatsiya cheklovi, taymautlar
API5 Broken Function Level AuthorizationOddiy foydalanuvchi administrator endpointini chaqiradiHar bir endpointda rolni tekshirish, standart bo‘yicha taqiqlash
API6 Unrestricted Access to Sensitive Business FlowsBotlar tovarni sotib olib tugatadi yoki ro‘yxatdan o‘tishni spam qiladiBiznes-mantiq darajasidagi limitlar va botlardan himoya
API7 Server Side Request ForgeryAPI foydalanuvchi bergan URL’ni yuklaydi va ichki servislarga yetib boradiManzillar oq ro‘yxati, ichki tarmoqlarni bloklash
API8 Security MisconfigurationBatafsil xatolar, ochiq CORS, TLS yo‘qXavfsiz standart sozlamalar, konfiglar review’si
API9 Improper Inventory ManagementEski /v1 yoki test endpointlari hali ishlayaptiReyestr yuritish, eski versiyalarni o‘chirish
API10 Unsafe Consumption of APIsUchinchi tomon API ma’lumotlariga ko‘r-ko‘rona ishonishTashqi ma’lumotni foydalanuvchi kiritgani kabi validatsiya qilish

Autentifikatsiya

  • Har bir endpoint, agar u aniq ommaviy deb e’lon qilinmagan bo‘lsa, autentifikatsiya talab qiladi.
  • Standart mexanizmlar (OAuth 2.0 / OpenID Connect, sessiyalar, to‘g‘ri sozlangan JWT) va qo‘llab-quvvatlanadigan kutubxonalardan foydalaning — o‘z token formatingizni o‘ylab topmang.
  • Access tokenlar qisqa yashaydi; yangilash va bekor qilish o‘ylab chiqilgan.
  • Kirish, parolni tiklash va OTP endpointlarida qat’iy limitlar.
  • Serverlararo integratsiyalar uchun API kalitlar huquqlar bo‘yicha cheklangan, muntazam almashtiriladi va hech qachon mobil ilova yoki frontend kodiga tushmaydi.

Obyekt darajasidagi avtorizatsiya

Bu API’dagi eng ko‘p uchraydigan kritik xato. Qoida: obyektni hech qachon faqat ID bo‘yicha yuklamang — doim kim so‘rayotganini hisobga oling.

app.get("/api/orders/:id", requireAuth, async (req, res) => {
  const order = await db.order.findFirst({
    where: { id: req.params.id, userId: req.user.id },
  });
  if (!order) return res.status(404).json({ error: "Not found" });
  res.json(order);
});

Ketma-ket ID’lar o‘rniga tasodifiy UUID’lar taxmin qilishni qiyinlashtiradi, lekin bu tekshiruvning o‘rnini bosmaydi.

Validatsiya va mass assignment

  • So‘rov tanasi, query parametrlar va sarlavhalarni qat’iy sxema bo‘yicha tekshiring: turlar, uzunliklar, formatlar, ruxsat etilgan qiymatlar.
  • Noma’lum maydonlarni jimgina saqlamang, rad eting. Aks holda foydalanuvchi profilni yangilash bilan birga "role": "admin" yuboradi.
  • Ma’lumotlarni bazaga aniq o‘tkazing; req.bodyni to‘g‘ridan-to‘g‘ri ORM update’ga bermang.
  • Javob sxemasi tashqariga aynan qaysi maydonlar chiqishini sanab o‘tadi — bazadagi yozuvni butunlay serializatsiya qilmang.
const UpdateProfile = z.object({
  name: z.string().min(1).max(100),
  phone: z.string().max(20).optional(),
}).strict();

const data = UpdateProfile.parse(req.body);

So‘rov va resurs limitlari

  • Foydalanuvchi, API kalit va IP bo‘yicha limitlar, qimmat va sezgir endpointlar uchun qat’iyroq.
  • Sahifa, so‘rov tanasi, yuklanadigan fayl hajmi va so‘rov murakkabligining maksimal chegarasi (GraphQL uchun — chuqurlik va narx cheklovlari).
  • Bazaga va tashqi so‘rovlarga taymautlar.
  • Vijdonli mijozlar sekinlashishi uchun 429 Too Many Requests qaytaring.

Xato xabarlari

  • Mijoz qisqa xabar va xato ID’sini oladi, tafsilotlar loglarga yoziladi.
  • Javoblarda stack trace, SQL bo‘laklari va ichki xost nomlari yo‘q.
  • Kirish va parolni tiklashda bunday email mavjudligini oshkor qilmang.
  • Obyekt mavjudligini tasdiqlamaslik uchun «topilmadi» va «sizniki emas» holatlariga bir xil javob bering.

CORS

  • Avtorizatsiyali API uchun * emas, faqat brauzerdan kirish haqiqatan kerak bo‘lgan origin’larga ruxsat bering.
  • Hech qachon har qanday kiruvchi Originni Access-Control-Allow-Credentials: true bilan birga qaytarmang.
  • Esda tuting: CORS faqat brauzerlarni boshqaradi. U API’ni skriptlar, serverlar va curl’dan himoya qilmaydi.

Loglar va API reyestri

  • Muvaffaqiyatsiz kirishlar, kirish rad etilishi, validatsiya xatolari va limit ishga tushishini foydalanuvchi ID va so‘rov ID bilan loglang.
  • Loglarga hech qachon parollar, tokenlar va to‘liq shaxsiy ma’lumotlarni yozmang.
  • G‘ayrioddiy andozalar uchun ogohlantirishlar sozlang, masalan bitta foydalanuvchi minglab turli obyekt ID’larini terib ko‘rganda.
  • API versiyalari, muhitlar va endpointlarning dolzarb ro‘yxatini yuriting; endi ishlatilmaydiganlarini o‘chiring.

Ko‘p beriladigan savollar

Ishonchli hamkor bilan server–server integratsiyasi uchun, agar kalit huquqlar bo‘yicha cheklangan, muntazam almashtirilsa va faqat HTTPS orqali yuborilsa, yetarli bo‘lishi mumkin. Oxirgi foydalanuvchilar uchun ilovaga joylangan kalit sir emas — foydalanuvchi autentifikatsiyasi kerak.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.