XSS (Cross-Site Scripting) uchun potensial kirish nuqtalarini aniqlash uchun veb-ilovani tahlil qilib, foydalanuvchi kiritadigan input maydonlarini aniqlashimiz kerak (masalan, qidiruv maydonlari). Agar bu inputlar tozalamasdan (ya’ni unsanitized holatda) keyingi sahifalarda chiqarilsa, bu joylar XSS uchun imkoniyat yaratadi.
Agar bunday kirish nuqtasini topsak, maxsus belgilarni kiritib, ularning qanday ko‘rinishini kuzatamiz. Agar maxsus belgilar filtrlanmay qaytib chiqsa, bu joy XSS zaifligiga ega bo‘lishi mumkin.
XSS aniqlash uchun ishlatiladigan eng keng tarqalgan maxsus belgilar quyidagilar:
< > ' " { } ;
Listing 23 – HTML va JavaScript uchun maxsus belgilar
Endi bu belgilar qanday maqsadda ishlatilishini tushuntirib o‘tamiz.
HTML’da "<" va ">" belgilaridan elementlarni belgilash uchun foydalaniladi, ya’ni bu belgilar HTML hujjatini tashkil etuvchi komponentlarni ifodalaydi.
JavaScript’da esa "{" va "}" belgilaridan funksiya e’lon qilishda foydalaniladi.
Yagona qo‘shtirnoq (') va ikki qo‘shtirnoq (") belgilar esa matnli qiymatlarni (ya’ni string’larni) belgilash uchun xizmat qiladi.
Nuqta-vergul (;) esa bayonot (statement) tugaganini bildiradi.
Agar dastur bu belgilarni olib tashlamasa yoki ularni kod sifatida ko‘rishining oldini olmasa (ya’ni encoding qilmasa), bu holda ilova ushbu belgilarni kod sifatida talqin qilishi mumkin. Bu esa qo‘shimcha kodlarning bajarilishiga imkon yaratadi va XSS zaifligini yuzaga keltiradi.
Turli kodlash (ya’ni encoding) turlari mavjud bo‘lsa-da, veb-ilovalarda eng ko‘p uchraydiganlari quyidagilardir:
HTML encoding — belgilarni ularning maxsus ma’nosini yo‘qotgan holda ko‘rsatish uchun ishlatiladi.
Misol uchun, < belgisi < ko‘rinishida yoziladi. Brauzer bunday yozilgan belgini element boshlanishi deb qabul qilmaydi, balki oddiy belgidek ko‘rsatadi.
URL encoding — bu percent encoding deb ham ataladi. U URL ichida ishlatib bo‘lmaydigan belgilarni o‘zgartirish uchun ishlatiladi.
Masalan, bo‘sh joy %20 bilan almashtiriladi.
Agar biz yuqoridagi maxsus belgilarni sahifaga joylasha olsak, brauzer ularni kod elementi sifatida qabul qiladi. Bu orqali biz o‘zimiz yozgan JavaScript kodini sahifaga inject qilib, u qurbon brauzerida yuklanishi bilan bajarilishiga erishamiz.
Biroq biz ishlatadigan belgilar to‘plami bizning input’imiz sahifaning qaysi qismiga joylashtirilayotganiga bog‘liq bo‘ladi.
Masalan:
Agar input <div> teglarining orasiga joylashtirilayotgan bo‘lsa, unda biz <script> tegi kiritishimiz kerak bo‘ladi, bu esa < va > belgilaridan foydalanishni talab qiladi.
Agar input mavjud JavaScript kodi ichiga qo‘shilayotgan bo‘lsa, unda ba’zida faqat qo‘shtirnoqlar (" yoki ') va nuqta-vergul (;) yetarli bo‘ladi.