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.
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.
- Foydalanuvchilarga zarar: o'g'irlangan parollar, moliyaviy yo'qotishlar, shaxsiy ma'lumotning ochilishi;
- Biznesga zarar: obro'ning yo'qolishi, jarimalar (masalan, GDPR kabi qonunlar buzilganda), mijozlarning ketishi;
- Texnik zarar: serverning ishdan chiqishi, ma'lumotlar bazasining buzilishi, xizmatning to'xtashi.
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.
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:
- Mijoz tomonidagi validatsiya โ bu faqat qulaylik (foydalanuvchiga tez javob berish uchun), xavfsizlik emas;
- Haqiqiy tekshiruv doim server tomonida takrorlanishi shart;
- Foydalanuvchi "faqat men ko'ra olaman" deb o'ylagan har qanday cheklovni server qayta tekshirishi kerak.
// 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
});
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.
- Shifrlash: yo'ldagi ma'lumot o'qib bo'lmaydigan holatga keltiriladi (maxfiylik);
- Butunlik: ma'lumot yo'lda o'zgartirilsa, buni aniqlash mumkin;
- Autentifikatsiya: sertifikat orqali siz haqiqatan ham to'g'ri serverga ulanayotganingizga ishonch hosil qilasiz.
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:
- Buzilgan kirish nazorati (Broken Access Control): foydalanuvchi o'ziga tegishli bo'lmagan ma'lumotga kira oladi โ avtorizatsiya darsida;
- Kriptografik xatolar: parolni ochiq saqlash, zaif shifrlash โ autentifikatsiya darsida;
- Injection (kiritish hujumlari): SQL injection, buyruq kiritish โ alohida darsda;
- Xavfsiz bo'lmagan dizayn: arxitektura darajasidagi kamchiliklar;
- Noto'g'ri konfiguratsiya: ochiq qoldirilgan sozlamalar, standart parollar;
- XSS (Cross-Site Scripting): zararli skript kiritish โ alohida darsda;
- Autentifikatsiya buzilishi: zaif sessiya boshqaruvi, brute-force himoyasining yo'qligi;
- Ma'lumot butunligining buzilishi: ishonchsiz manbalardan yangilanishlar.
Xavfsizlik โ jarayon, bir martalik ish emas
Xavfsizlikni bir marta "qilib qo'yib" bo'lmaydi. Bu doimiy jarayon:
- Bog'liqliklarni yangilab turing:
npm auditorqali zaif paketlarni tekshiring; - Eng kam imtiyoz tamoyili: har bir komponent faqat zarur bo'lgan huquqqa ega bo'lsin;
- Loglar va monitoring: shubhali harakatlarni kuzatib boring;
- Xatoni tan olish: mukammal xavfsiz tizim yo'q; muammoni tez aniqlab, tuzatish qobiliyati muhim.
// 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
- Xavfsizlik loyihaning ajralmas qismi bo'lishi kerak, keyin qo'shiladigan xususiyat emas;
- CIA triadasi (maxfiylik, butunlik, mavjudlik) xavfsizlikni baholash ramkasidir;
- Eng muhim tamoyil โ foydalanuvchi kiritmasiga hech qachon ishonmaslik; haqiqiy tekshiruv doim server tomonida bo'ladi;
- HTTPS tarmoq qatlamida maxfiylik va butunlikni ta'minlaydi โ u majburiy;
- OWASP Top 10 eng keng tarqalgan zaifliklarga e'tibor qaratishga yordam beradi;
- Xavfsizlik โ bu chuqurlashtirilgan himoya (defense in depth): ustma-ust qatlamlar.