XSS (Cross Site Scripting)
рдпрджрд┐ рдЖрдк рд╣реИрдХрд┐рдВрдЧ рдХрд░рд┐рдпрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдЪреВрдХ рдХреЛ рд╣реИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╣рдо рднрд░реНрддреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ! (рдлреНрд▓реВрдПрдВрдЯ рдкреЛрд▓рд┐рд╢ рд▓рд┐рдЦрд┐рдд рдФрд░ рдореМрдЦрд┐рдХ рдЖрд╡рд╢реНрдпрдХ).
рдкрджреНрдзрддрд┐
рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреЛрдИ рднреА рдорд╛рди рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдкреИрд░рд╛рдореАрдЯрд░, рдкрде, рд╣реЗрдбрд░?, рдХреБрдХреАрдЬрд╝?) HTML рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ JS рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдЦреЛрдЬреЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд/рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реИ:
рдЬрд╛рдВрдЪреЗрдВ рдЖрдк рдХреМрди рд╕реЗ рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреЗрд▓реЛрдб рддреИрдпрд╛рд░ рдХрд░реЗрдВ:
рдХрдЪреНрдЪреЗ HTML рдореЗрдВ:
рдХреНрдпрд╛ рдЖрдк рдирдП HTML рдЯреИрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЖрдк
javascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрд╡реЗрдВрдЯ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдХреНрдпрд╛ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ HTML рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб JS рдЗрдВрдЬрди (AngularJS, VueJS, Mavo...) рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ HTML рдЯреИрдЧ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдбреИрдВрдЧрд▓рд┐рдВрдЧ рдорд╛рд░реНрдХрдЕрдк - HTML рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓реЗрд╕ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдПрдХ HTML рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░:
рдХреНрдпрд╛ рдЖрдк рдХрдЪреНрдЪреЗ HTML рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЖрдк JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдЗрд╡реЗрдВрдЯ/рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдлрдВрд╕реЗ рд╣реИрдВ, JS рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рд╣реИ?
рдХреНрдпрд╛ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
JavaScript рдХреЛрдб рдХреЗ рдЕрдВрджрд░:
рдХреНрдпрд╛ рдЖрдк
<script>
рдЯреИрдЧ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ?рдХреНрдпрд╛ рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЯреЗрд░рд▓ `` рдореЗрдВ рд╣реИ?
рдХреНрдпрд╛ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
Javascript рдлрдВрдХреНрд╢рди рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ:
рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:
?callback=alert(1)
рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛:
рдЖрдк DOM XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рдХрд┐рд╕реА рд╕рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЬрдм рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ XSS рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
Debugging Client Side JSрдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдорд╛рди
XSS рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдорд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЕрдВрддрд░рд┐рдо рд░реВрдк рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд: рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдкрде рд╡реЗрдм рдкреГрд╖реНрда рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд: рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдорд╛рди рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрдЧреНрд░рд╣реАрдд XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
JS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЧрдпрд╛: рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдорд╛рди рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣реБрдБрдЪ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк DOM XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрджрд░реНрдн
рдЬрдм рдЖрдк XSS рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдХрд╣рд╛рдБ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдордирдорд╛рдирд╛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХреЗрдВрдЧреЗред
рдХрдЪреНрдЪрд╛ HTML
рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдХрдЪреНрдЪреЗ HTML рдкреГрд╖реНрда рдкрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреЛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ HTML рдЯреИрдЧ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: <img , <iframe , <svg , <script
... рдпреЗ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд HTML рдЯреИрдЧ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред
HTML рдЯреИрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░
рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдХрд┐рд╕реА рдЯреИрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЯреИрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП (рдлрд┐рд░ рдЖрдк рдХрдЪреНрдЪреЗ HTML рдореЗрдВ рд╣реЛрдВрдЧреЗ) рдФрд░ рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирдпрд╛ HTML рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
"><img [...]
рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЯреИрдЧ рд╕реЗ рдирд╣реАрдВ (
>
рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдЯреИрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдПрдХ рдЗрд╡реЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ:" autofocus onfocus=alert(1) x="
рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрддреЗ (
"
рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рдорд╛рди рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдорд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкonclick=
рдЬреИрд╕реЗ рдЗрд╡реЗрдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХреЗрдВрдЧреЗред рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛href
рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПjavascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:href="javascript:alert(1)"
рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ "рдЕрд╡рд┐рдХрд╕рд┐рдд рдЯреИрдЧ" рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдк
accesskey
рдЯреНрд░рд┐рдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ рдЗрд╕реЗ рд╢реЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдорд╛рдЬрд┐рдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА):" accesskey="x" onclick="alert(1)" x="
рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдирд╛рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ Angular рджреНрд╡рд╛рд░рд╛ XSS рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдЬреАрдм рдЙрджрд╛рд╣рд░рдг:
Inside JavaScript code
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ <script> [...] </script>
рдЯреИрдЧ рдХреЗ рдмреАрдЪ, рдПрдХ HTML рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░, рдПрдХ .js
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдпрд╛ javascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
рдпрджрд┐
<script> [...] </script>
рдЯреИрдЧ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рднрд▓реЗ рд╣реА рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджреНрдзрд░рдг рдХреЗ рдЕрдВрджрд░ рд╣реЛ, рдЖрдк</script>
рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╣рд▓реЗ HTML рдЯреИрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдирд╣реАрдВ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛</script>
рдЯреИрдЧ HTML рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд╣реИредрдпрджрд┐ JS рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдЯреНрд░рд┐рдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ, рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ JS рдХреЛрдб рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛):
'-alert(1)-'
';-alert(1)//
\';alert(1)//
рдпрджрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЯреЗрд░рд▓ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк
${ ... }
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JS рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЛ рдПрдВрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:var greetings = `Hello, ${alert(1)}`
Unicode рдПрдиреНрдХреЛрдб рдорд╛рдиреНрдп javascript рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
Javascript Hoisting
Javascript Hoisting рдЙрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдХрд╛рд░реНрдпреЛрдВ, рдЪрд░ рдпрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдЬрд╣рд╛рдБ XSS рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЪрд░ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рджреЗрдЦреЗрдВ:
JS HoistingJavascript Function
рдХрдИ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдРрд╕реЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ рд╣реИ: ?callback=callbackFunc
.
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 'Vulnerable' рдореЗрдВ) рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдЬреИрд╕реЗ:
рдпрджрд┐ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЕрд▓рд░реНрдЯ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗрд╡рд▓ рдорд╛рди рднреЗрдЬрдХрд░: ?callback=alert(1)
ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдпреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ, рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХреЗ ([\w\._]
).
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрд╕ рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдорд╛рдиреНрдп рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ DOM рдореЗрдВ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ:
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп:
рдЖрдк рд╕реАрдзреЗ Javascript рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: obj.sales.delOrders
ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдРрд╕реЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдк DOM рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╕рдорд╛рди рдореВрд▓ рдХреЗ рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдк DOM рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХреА рдЬрд╛ рд╕рдХреЗрдВред
рдЗрд╕рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди DOM рдореЗрдВ рдЗрд╕ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Same Origin Method Execution (SOME) рд╢реЛрд╖рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛:
SOME - Same Origin Method ExecutionDOM
рдпрд╣рд╛рдБ JS рдХреЛрдб рд╣реИ рдЬреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреБрдЫ рд╣рдорд▓рд╛рд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ location.href
ред рдПрдХ рд╣рдорд▓рд╛рд╡рд░, рдЗрд╕реЗ рдордирдорд╛рдиреЗ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Universal XSS
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ XSS рдХрд╣реАрдВ рднреА рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реЛрд╖рдг рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреЗ рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдордирдорд╛рдиреЗ JavaScript рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдФрд░ рд╕рд░реНрд╡рд░реНрд╕ рдореЗрдВ рдордирдорд╛рдиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ, рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:
Server Side XSS (Dynamic PDF)Electron Desktop AppsWAF рдмрд╛рдпрдкрд╛рд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЗрдореЗрдЬ
рдХрдЪреНрдЪреЗ HTML рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛
рдЬрдм рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ HTML рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ HTML рдХреЛрдб рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк <
рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рдЯреИрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдмрд╕ рдЙрд╕ рдЪрд░ рдХреЛ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ HTML рдПрдиреНрдХреЛрдбреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдпрд╣ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ Client Side Template Injectionред
рдиреЛрдЯ: рдПрдХ HTML рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП******** -->
рдпрд╛ ****--!>
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдмреНрд▓реИрдХ/рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдРрд╕реЗ рдкреЗ рд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
But, if tags/attributes black/whitelisting is being used, you will need to brute-force which tags you can create. Once you have located which tags are allowed, you would need to brute-force attributes/events inside the found valid tags to see how you can attack the context.
Tags/Events brute-force
Go to https://portswigger.net/web-security/cross-site-scripting/cheat-sheet and click on Copy tags to clipboard. Then, send all of them using Burp intruder and check if any tags wasn't discovered as malicious by the WAF. Once you have discovered which tags you can use, you can brute force all the events using the valid tags (in the same web page click on Copy events to clipboard and follow the same procedure as before).
Custom tags
If you didn't find any valid HTML tag, you could try to create a custom tag and and execute JS code with the onfocus
attribute. In the XSS request, you need to end the URL with #
to make the page focus on that object and execute the code:
Blacklist Bypasses
рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдХреБрдЫ рдмреЗрд╡рдХреВрдлреА рднрд░реЗ рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Length bypass (small XSSs)
рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЫреЛрдЯреЗ XSS payload рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ.
The last one is using 2 unicode characters which expands to 5: telsr More of these characters can be found here. To check in which characters are decomposed check here.
Click XSS - Clickjacking
рдпрджрд┐ рдХрд┐рд╕реА рднреЗрджреНрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рдпрд╛ рдПрдХ рдлреЙрд░реНрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрд╡-рднрд░реЗ рд╣реБрдП рдбреЗрдЯрд╛ рд╣реИрдВ, рддреЛ рдЖрдк Clickjacking рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдкреГрд╖реНрда рднреЗрджреНрдп рд╣реИ)ред
Impossible - Dangling Markup
рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдпрд╣ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ HTML рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ рдЖрдкрдХреЛ Dangling Markup рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рднреЗрджреНрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдПред
Injecting inside HTML tag
Inside the tag/escaping from attribute value
рдпрджрд┐ рдЖрдк HTML рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рдЯреИрдЧ рд╕реЗ рдмрдЪрдирд╛ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХреБрдЫ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдк рдЯреИрдЧ рд╕реЗ рдирд╣реАрдВ рдмрдЪ рд╕рдХрддреЗ, рддреЛ рдЖрдк рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдирдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреЗрд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдХреЛрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рд╕реАрдзреЗ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА):
рд╢реИрд▓реА рдШрдЯрдирд╛рдПрдБ
Within the attribute
рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЕрдЧрд░ рдЖрдк attribute рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрддреЗ ("
рдХреЛ рдПрдиреНрдХреЛрдб рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ attribute рдЖрдкрдХреЗ рдорд╛рди рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╕рднреА рдорд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдЗрд╡реЗрдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ onclick=
рддреЛ рдЖрдк рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХреЗрдВрдЧреЗред
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ attribute href
, рдЬрд╣рд╛рдВ рдЖрдк javascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: href="javascript:alert(1)"
HTML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/URL рдПрдиреНрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╡реЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ
HTML рдЯреИрдЧ рдХреЗ attributes рдХреЗ рдорд╛рди рдХреЗ рдЕрдВрджрд░ HTML рдПрдиреНрдХреЛрдбреЗрдб рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдбрд┐рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ (рдкреЗрд▓реЛрдб рдмреЛрд▓реНрдб рдореЗрдВ рд╣реИ): <a id="author" href="http://none" onclick="var tracker='http://foo?
'-alert(1)-'
';">Go Back </a>
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА HTML рдПрдиреНрдХреЛрдб рдорд╛рдиреНрдп рд╣реИ:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ URL рдПрдиреНрдХреЛрдб рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛:
рдпреВрдирд┐рдХреЛрдб рдПрдиреНрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирд╕рд╛рдЗрдб рдЗрд╡реЗрдВрдЯ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ
рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рднреАрддрд░
рдпрд╣рд╛рдВ рдЖрдк рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ javascript:
рдпрд╛ data:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдордирдорд╛рдиреЗ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреБрдЫ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдХреБрдЫ рдХреЛ рдирд╣реАрдВред
рдЗрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЖрдк рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рд╛рдорд╛рдиреНрдпрддрдГ javascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ href
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрддрд░ рдЯреИрдЧ рдореЗрдВ рдЬреЛ src
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди <img>
рдореЗрдВ рдирд╣реАрдВ)
рдЕрдиреНрдп рдУрдмрдлрд╕реНрдХреЗрд╢рди рдЯреНрд░рд┐рдХреНрд╕
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рд╕реЗ HTML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдпреВрдирд┐рдХреЛрдб рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЯреНрд░рд┐рдХ рднреА рдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдПрдХ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдЯреНрд░рд┐рдХ рд╣реИ: рднрд▓реЗ рд╣реА рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ javascript:...
рдХреЗ рдЕрдВрджрд░ URL рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛ, рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ URL рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдХрд╛ рдПрд╕реНрдХреЗрдк рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ URL рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ, рддреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рджреЛрдиреЛрдВ URLencode + HTMLencode
рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ payload рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк payload рдХреЗ рдЕрдВрджрд░ рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
javascript:
рдХреЗ рд╕рд╛рде Hex рдФрд░ Octal рдПрдиреНрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЖрдк Hex рдФрд░ Octal рдПрдиреНрдХреЛрдб рдХреЛ iframe
рдХреЗ src
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ (рдХрдо рд╕реЗ рдХрдо) JS рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдЯреИрдЧ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд░рд┐рд╡рд░реНрд╕ рдЯреИрдм рдирдмрд┐рдВрдЧ
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА URL рдХреЛ рдордирдорд╛рдиреЗ <a href=
рдЯреИрдЧ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ target="_blank" рдФрд░ rel="opener"
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдмрд╛рдпрдкрд╛рд╕ рдкрд░
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкреГрд╖реНрда рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) рдЙрдкрдпреЛрдЧреА "on" рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдХреЛрдИ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрди рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рдпрдкрд╛рд╕ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
XSS in "Unexploitable tags" (hidden input, link, canonical, meta)
From рдпрд╣рд╛рдБ рдЕрдм рдЫрд┐рдкреЗ рд╣реБрдП рдЗрдирдкреБрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
рдФрд░ meta tags рдореЗрдВ:
From рдпрд╣рд╛рдБ: рдЖрдк рдПрдХ XSS рдкреЗрд▓реЛрдб рдХреЛ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рдЖрдк рд╢рд┐рдХрд╛рд░ рдХреЛ рдХреА рд╕рдВрдпреЛрдЬрди рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреА рдХрд░ рд╕рдХреЗрдВред Firefox Windows/Linux рдкрд░ рдХреА рд╕рдВрдпреЛрдЬрди ALT+SHIFT+X рд╣реИ рдФрд░ OS X рдкрд░ рдпрд╣ CTRL+ALT+X рд╣реИред рдЖрдк рдПрдХреНрд╕реЗрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХреА рд╕рдВрдпреЛрдЬрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡реЗрдХреНрдЯрд░ рд╣реИ:
XSS рдкреЗрд▓реЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛: " accesskey="x" onclick="alert(1)" x="
рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдмрд╛рдпрдкрд╛рд╕
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЯреНрд░рд┐рдХреНрд╕ рдкрд╣рд▓реЗ рд╣реА рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЬрд╛ рдЪреБрдХреЗ рд╣реИрдВред рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рд╕реАрдЦреЗрдВ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
HTML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (HTML рдЯреИрдЧ)
рдпреВрдирд┐рдХреЛрдб рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдорд╛рдиреНрдп JS рдХреЛрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):
\u0061lert(1)
URL рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рд╣реИрдХреНрд╕ рдФрд░ рдСрдХреНрдЯрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
HTML рдЯреИрдЧ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдкрд╛рд╕
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдкрд╛рд╕
CSS-рдЧреИрдЬреЗрдЯреНрд╕
рдпрджрд┐ рдЖрдкрдиреЗ рд╡реЗрдм рдХреЗ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ XSS рдкрд╛рдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдлреБрдЯрд░ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд▓рд┐рдВрдХ рдЬрд┐рд╕рдореЗрдВ рдПрдХ onmouseover рддрддреНрд╡ рд╣реИ), рддреЛ рдЖрдк рдЙрд╕ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХреА рдЧрдИ рдЬрдЧрд╣ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддрддреНрд╡ рдореЗрдВ рдХреБрдЫ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5
рд▓реЗрдХрд┐рди, рдпрджрд┐ WAF рд╕реНрдЯрд╛рдЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк CSS рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдЧреИрдЬреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рддреЗ рд╣реИрдВ
.test {display:block; color: blue; width: 100%}
рдФрд░
#someid {top: 0; font-family: Tahoma;}
рдЕрдм рдЖрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
<a href="" id=someid class=test onclick=alert() a="">
рдпрд╣ рдЯреНрд░рд┐рдХ https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703 рд╕реЗ рд▓реА рдЧрдИ рдереАред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛
рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ JS рдХреЛрдб рдХреЗ рдПрдХ .js
рдлрд╝рд╛рдЗрд▓ рдпрд╛ <script>...</script>
рдЯреИрдЧ рдХреЗ рдмреАрдЪ рдпрд╛ HTML рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЬреЛ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЬреЛ javascript:
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
<script> рдЯреИрдЧ рдХреЛ рдПрд╕реНрдХреЗрдк рдХрд░рдирд╛
рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб <script> [...] var input = 'reflected data' [...] </script>
рдХреЗ рднреАрддрд░ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ <script>
рдЯреИрдЧ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдПрд╕реНрдХреЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдХреЛ рднреА рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ HTML рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреНрд▓реЙрдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред JavaScript рдХрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
JS рдХреЛрдб рдХреЗ рдЕрдВрджрд░
рдпрджрд┐ <>
рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрднреА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрд╕реНрдХреЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдордирдорд╛рдиреЗ JS рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред JS рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ, рддреЛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛:
Template literals ``
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдПрдХрд▓ рдФрд░ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, JS рдмреИрдХрдЯрд┐рдХреНрд╕ ``
рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЯреЗрд░рд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ${ ... }
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ JS рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЛ рдПрдВрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдПрдХ JS рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рд░рд┐рдлреНрд▓реЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмреИрдХрдЯрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдордирдорд╛рдиреЗ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ${ ... }
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдПрдиреНрдХреЛрдбреЗрдб рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди
рдпреВрдирд┐рдХреЛрдб рдПрдиреНрдХреЛрдб JS рдирд┐рд╖реНрдкрд╛рджрди
JavaScript рдмрд╛рдпрдкрд╛рд╕ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рддрдХрдиреАрдХреЗрдВ
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕
рд╡рд┐рд╢реЗрд╖ рдПрд╕реНрдХреЗрдк
JS рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд╕реНрдкреЗрд╕ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ (рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдХреМрд╢рд▓)
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирдИ рдкрдВрдХреНрддрд┐ рдХрд▓рд╛)
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕
рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдВрджрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдмрд┐рдирд╛ рдХреЛрд╖реНрдардХ рдХреЗ JavaScript