Reflected va stored XSS'ni sinaganda asosiy vazifa — XSS kontekstini aniqlash: hujumchi boshqaradigan ma'lumot javobda qayerda paydo bo'lishi va unga qanday tekshiruv/qayta ishlash qo'llanishi. Shunga qarab mos payloadni tanlaysiz.
XSS konteksti HTML teglar orasidagi matn bo'lganda, JavaScript bajarilishini keltirib chiqaradigan yangi HTML teglar kiritishingiz kerak:
<script>alert(document.domain)</script>
<img src=1 onerror=alert(1)>XSS konteksti HTML atribut qiymati ichida bo'lganda, atribut qiymatini tugatib, tegni yopib, yangi teg kiritishga urinishingiz mumkin ("><script>...). Ko'pincha burchak qavslar bloklanadi — u holda yangi atribut (masalan event handler) kiritasiz:
" autofocus onfocus=alert(document.domain) x="Ba'zan kontekst skriptlanadigan atributga (masalan href) tushadi — u holda javascript: psevdo-protokolidan foydalanish mumkin:
<a href="javascript:alert(document.domain)">XSS konteksti javobdagi mavjud JavaScript ichida bo'lganda turli usullar kerak. Eng oddiy holatda </script> bilan mavjud script tegini yopib, yangi teg kiritishingiz mumkin:
</script><img src=1 onerror=alert(document.domain)>Kontekst qo'shtirnoqli satr ichida bo'lsa, satrdan chiqib ketishingiz mumkin (JavaScript'ni ta'mirlashni unutmang):
'-alert(document.domain)-'
';alert(document.domain)//Ba'zan ilova bitta qo'shtirnoqni backslash bilan escape qiladi, lekin backslash'ning o'zini escape qilishni unutadi — bunda o'z backslash'ingiz bilan uni neytrallashtirasiz.
Ba'zan belgilar cheklanadi — u holda qavslarsiz funksiya chaqirish usullari kerak, masalan throw bilan:
onerror=alert;throw 1XSS konteksti qo'shtirnoqli teg atributidagi (masalan event handler) mavjud JavaScript bo'lganda, brauzer atribut qiymatini HTML-dekod qiladi. Shuning uchun bloklangan belgilarni HTML-entity bilan kodlab (') filtrni chetlab o'tishingiz mumkin:
'-alert(document.domain)-'Template literallar backtik bilan o'raladi va ${...} sintaksisi bilan ifodalar joylanadi. Kontekst template literal ichida bo'lsa, literalni tugatish shart emas — shunchaki ${...} bilan ifoda joylaysiz:
${alert(document.domain)}Ba'zi vebsaytlar AngularJS kabi client-side template freymvorkdan foydalanadi. Ular foydalanuvchi kiritmasini xavfsiz bo'lmagan tarzda template'ga joylasa, hujumchi o'z template ifodalarini kiritib XSS amalga oshirishi mumkin.