Ushbu bo'limda cross-site scripting nima ekanini tushuntiramiz, XSS zaifliklarining turli xillarini ta'riflaymiz va XSS'ni qanday topish hamda oldini olishni ko'rsatamiz.
Cross-site scripting (XSS deb ham ataladi) — bu veb-xavfsizlik zaifligi bo'lib, hujumchiga foydalanuvchilarning zaif ilova bilan o'zaro ta'sirini buzishga imkon beradi. U hujumchiga same-origin policy'ni chetlab o'tishga imkon beradi. XSS zaifliklari odatda hujumchiga jabrlanuvchi foydalanuvchi qiyofasiga kirib, u bajara oladigan har qanday amalni bajarish va uning barcha ma'lumotlariga kirish imkonini beradi. Agar jabrlanuvchi imtiyozli bo'lsa, hujumchi butun ilova ustidan to'liq nazoratni qo'lga kiritishi mumkin.
Cross-site scripting zaif vebsaytni foydalanuvchilarga zararli JavaScript qaytarishga majbur qilish orqali ishlaydi. Zararli kod jabrlanuvchi brauzerida bajarilganda, hujumchi uning ilova bilan o'zaro ta'sirini to'liq buzishi mumkin.
XSS zaifligini brauzeringizni ixtiyoriy JavaScript bajarishga majbur qiladigan payload kiritib tasdiqlashingiz mumkin. Bu maqsadda an'anaviy ravishda alert() funksiyasidan foydalaniladi. Biroq Chrome'ning 92-versiyasidan (2021-yil 20-iyul) cross-origin iframe'lar alert() ni chaqira olmaydi — bunday holatda print() funksiyasidan foydalanish tavsiya etiladi.
XSS hujumlarining uchta asosiy turi bor:
Reflected XSS — ilova HTTP so'rovda ma'lumotni olib, uni darhol javobga xavfsiz bo'lmagan tarzda qo'shganda yuzaga keladi. Masalan:
https://insecure-website.com/status?message=<script>/* Yomon narsa... */</script>
<p>Status: <script>/* Yomon narsa... */</script></p>Stored XSS (persistent yoki second-order XSS deb ham ataladi) — ilova ishonchsiz manbadan ma'lumot olib, uni keyingi javoblarga xavfsiz bo'lmagan tarzda qo'shganda yuzaga keladi (masalan blog izohlari, chat taxalluslari).
DOM-based XSS — ilova client-side JavaScript ishonchsiz manbadan (masalan URL) olingan ma'lumotni xavfsiz bo'lmagan tarzda DOM'ga qayta yozganda yuzaga keladi:
var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;XSS zaifligidan foydalanadigan hujumchi odatda quyidagilarni qila oladi: jabrlanuvchi qiyofasiga kirish; foydalanuvchi bajara oladigan har qanday amalni bajarish; foydalanuvchi kira oladigan ma'lumotni o'qish; login ma'lumotlarini olish; vebsaytni vizual buzish (defacement); vebsaytga troyan funksiyasini kiritish.
XSS hujumining haqiqiy ta'siri odatda ilovaning tabiati, funksiyasi va buzilgan foydalanuvchining maqomiga bog'liq. Anonim foydalanuvchilarga ega oddiy sayt uchun ta'sir minimal bo'lishi mumkin, lekin banking yoki tibbiyot ma'lumotlarini saqlaydigan ilovada jiddiy, imtiyozli foydalanuvchi buzilsa esa kritik bo'ladi.
XSS zaifliklarining aksariyatini Burp Suite'ning web vulnerability scanner'i bilan tez va ishonchli topish mumkin. Qo'lda reflected va stored XSS'ni sinash har bir kirish nuqtasiga oddiy unikal kiritma yuborib, u javobda qayerda qaytishini aniqlab, har bir joyda mos payload bilan JavaScript bajarilishini tekshirishni o'z ichiga oladi.
CSP — XSS va boshqa zaifliklarning ta'sirini yumshatishga qaratilgan brauzer mexanizmi. CSP ishlatadigan ilovada XSS'ga o'xshash xatti-harakat bo'lsa, CSP ekspluatatsiyani to'sishi mumkin. Ko'pincha CSP'ni chetlab o'tish mumkin. Batafsil: Content security policy.
XSS'ning oldini olish odatda quyidagi choralar kombinatsiyasini o'z ichiga oladi: kelganda kiritmani filtrlash; chiqishda ma'lumotni kodlash (encode); mos javob sarlavhalaridan (Content-Type, X-Content-Type-Options) foydalanish; oxirgi himoya chizig'i sifatida CSP. Batafsil: XSS oldini olish.
XSS qanchalik keng tarqalgan? XSS zaifliklari juda keng tarqalgan — ehtimol eng ko'p uchraydigan veb-xavfsizlik zaifligi.
XSS va CSRF farqi nima? XSS vebsaytni zararli JavaScript qaytarishga majbur qiladi, CSRF esa jabrlanuvchini o'zi niyat qilmagan amallarni bajarishga undaydi.
XSS va SQL injection farqi nima? XSS — boshqa ilova foydalanuvchilarini nishonga oladigan client-side zaiflik; SQL injection — ilova bazasini nishonga oladigan server-side zaiflik.