Web xavfsizligi va autentifikatsiya

Web xavfsizligi asoslari

Web ilova tarmoqqa ochilgan zahoti u nafaqat foydalanuvchilarga, balki niyati buzuq kishilarga ham ochiladi. Xavfsizlik โ€” bu "keyin qo'shiladigan" xususiyat emas, balki ilovani loyihalashning ajralmas qismidir. Ushbu darsda biz xavfsizlik nima uchun muhimligini, uni baholashning asosiy ramkasini (CIA triadasi) va zamonaviy web ilovalarga tahdid soladigan asosiy zaifliklarni faqat himoya nuqtai nazaridan o'rganamiz.

Ushbu bob to'liq ta'lim maqsadida yozilgan. Maqsad โ€” sizni himoyachi dasturchi qilib tayyorlash: zaiflik qanday paydo bo'lishini tushunib, undan qanday himoyalanishni bilishingiz uchun. Hech qanday hujum qilish yo'riqnomasi berilmaydi.

Nega xavfsizlik muhim?

Har qanday jiddiy web ilova foydalanuvchilarning ma'lumotlari bilan ishlaydi: parollar, email manzillari, to'lov kartalari, shaxsiy yozishmalar. Bir marta yo'l qo'yilgan xatolik minglab foydalanuvchining ma'lumotini xavf ostiga qo'yishi mumkin.

Muhim tushuncha: xavfsizlikda hujumchi doim bitta zaiflikni topsa yetadi, himoyachi esa barcha zaifliklarni yopishi kerak. Shu sabab xavfsizlik ustma-ust qatlamlardan iborat bo'lishi lozim โ€” buni chuqurlashtirilgan himoya (defense in depth) deyiladi.

CIA triadasi

Axborot xavfsizligining klassik uchligi โ€” bu CIA triadasi. Bu Markaziy Razvedka Boshqarmasi emas, balki uchta tamoyilning inglizcha bosh harflari:

1. Maxfiylik (Confidentiality)

Ma'lumotni faqat unga huquqi bor kishilar ko'ra olishi kerak. Foydalanuvchining paroli, xabarlari, kartasi begonaga ko'rinmasligi shart. Maxfiylikni ta'minlash vositalari: shifrlash (HTTPS, ma'lumotni bazada shifrlash), to'g'ri avtorizatsiya, ma'lumotga kirishni cheklash.

2. Butunlik (Integrity)

Ma'lumot ruxsatsiz o'zgartirilmasligi kerak. Masalan, foydalanuvchi bankdagi balansini o'zboshimchalik bilan o'zgartira olmasligi lozim. Butunlikni himoya qiluvchi vositalar: raqamli imzolar, hash-tekshirishlar, server tomonida qat'iy tekshiruvlar.

3. Mavjudlik (Availability)

Xizmat unga muhtoj bo'lgan foydalanuvchilar uchun ishlab turishi kerak. Server yuklama hujumlari (masalan, xizmatni rad etish hujumlari) tufayli ishdan chiqmasligi lozim. Vositalar: yuklama muvozanati, so'rov chastotasini cheklash (rate limiting), zaxira nusxalar.

Har qanday xavfsizlik qarorini qabul qilayotganda o'zingizga savol bering: "Bu qaror maxfiylik, butunlik va mavjudlikning qaysi biriga xizmat qiladi?" Bu uch tamoyil sizga tizimli fikrlash ramkasini beradi.

Asosiy tamoyil: foydalanuvchiga hech qachon ishonmang

Web xavfsizligining eng muhim aqli โ€” "Never trust user input" (foydalanuvchi kiritmasiga hech qachon ishonmang). Brauzerdan, mobil ilovadan yoki boshqa mijozdan kelgan har qanday ma'lumot potensial ravishda soxta yoki zararli bo'lishi mumkin.

Mijoz tomonidagi kod (JavaScript, HTML forma) foydalanuvchi to'liq nazorat qiladigan muhitda ishlaydi. Foydalanuvchi brauzer developer vositalarini ochib, so'rovni istagancha o'zgartirishi mumkin. Shuning uchun:

// YOMON: faqat mijoz tomonida tekshiruv
// Frontend'da narxni hisoblab, serverga jo'natish
fetch('/api/buyurtma', {
  method: 'POST',
  body: JSON.stringify({ mahsulotId: 42, narx: 1 }) // foydalanuvchi narxni o'zgartirdi!
});

// Bunday holatda foydalanuvchi 'narx' ni o'zi belgilashi mumkin.
// Server unga ishonib qolsa โ€” pul yo'qotiladi.
// YAXSHI: server narxni O'ZI ma'lumotlar bazasidan oladi
app.post('/api/buyurtma', async (req, res) => {
  const { mahsulotId } = req.body;

  // Narxni mijozdan EMAS, bazadan olamiz
  const mahsulot = await db.mahsulotTop(mahsulotId);
  if (!mahsulot) {
    return res.status(404).json({ xato: 'Mahsulot topilmadi' });
  }

  const haqiqiyNarx = mahsulot.narx; // ishonchli manba
  // ... buyurtmani haqiqiyNarx bilan yaratamiz
});
Mijozdan kelgan hech qanday narxni, huquqni, foydalanuvchi identifikatorini ko'r-ko'rona qabul qilmang. Har doim server tomonidagi ishonchli manbadan (ma'lumotlar bazasi, sessiya) qayta tasdiqlang.

HTTPS โ€” tarmoq qatlamidagi himoya

HTTP protokoli ma'lumotni ochiq matnda uzatadi. Ya'ni foydalanuvchi va server orasidagi yo'lda (masalan, umumiy Wi-Fi tarmog'ida) o'tirgan har kim parol va ma'lumotni ko'ra oladi. HTTPS esa TLS shifrlashi orqali bu ma'lumotni himoyalaydi.

Zamonaviy web ilovada HTTPS majburiy. Bepul sertifikatlar (masalan, Let's Encrypt) mavjud. Express ilovasida foydalanuvchilarni HTTPS'ga yo'naltirish va xavfsizlik sarlavhalarini qo'shish odat tusiga kirgan:

const express = require('express');
const helmet = require('helmet');
const app = express();

// helmet xavfsizlik bilan bog'liq HTTP sarlavhalarini o'rnatadi
app.use(helmet());

// HTTP so'rovlarni HTTPS'ga yo'naltirish (proxy orqasida)
app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] === 'http') {
    return res.redirect('https://' + req.headers.host + req.url);
  }
  next();
});
helmet โ€” bu Express uchun mashhur kutubxona bo'lib, u xavfsizlik bilan bog'liq bir qancha HTTP sarlavhalarini (masalan, X-Content-Type-Options, Strict-Transport-Security) avtomatik o'rnatadi. Uni ishlatish โ€” arzon va samarali himoya qadamidir.

Umumiy tahdidlar: OWASP qisqacha

OWASP (Open Worldwide Application Security Project) โ€” web xavfsizligi bo'yicha nufuzli notijorat tashkilot. Ular muntazam ravishda eng xavfli zaifliklar ro'yxatini (OWASP Top 10) chiqaradi. Quyida ushbu ro'yxatning asosiy qismlari va ular qaysi darsda o'rganilishi:

OWASP Top 10 โ€” bu qat'iy imtihon ro'yxati emas, balki e'tibor qaratish uchun ustuvorlik ro'yxati. Amaliyotda bularning ko'pchiligi bitta oddiy tamoyilga bog'lanadi: kiritmaga ishonmaslik va har qatlamda tekshirish.

Xavfsizlik โ€” jarayon, bir martalik ish emas

Xavfsizlikni bir marta "qilib qo'yib" bo'lmaydi. Bu doimiy jarayon:

// Loyihadagi zaif bog'liqliklarni tekshirish
// $ npm audit
//
// Avtomatik tuzatishga urinish (ehtiyotkorlik bilan)
// $ npm audit fix
//
// Bu buyruqlar ma'lum zaifliklarga ega paketlar haqida
// ogohlantiradi va yangilash yo'llarini taklif qiladi.

Xulosa