Ломать - не строить
[email protected]), и не подтверждая email зайти через него на один из сайтов, если веб-приложение будет ему доверять.'-alert()-' в качестве имени), когда как при обычной регистрации спецсимволы использовать запрещено.Content-Type: text/plain, xml, text/html, json
Оказывается - html! Некоторые браузеры парсят content-type через запятую и берут последний валидный вариант.getSalt(user_id)
checkPassword(user_id, hashed_password)
onfocus и autofocus рушится, если autofocus стоит в другом месте. А всякие onmouseover, не подойдут, потому что нужно, чтобы пользователь задел курсором уязвимое поле. <span class="mw-headline" id="Privacy">Privacy</span>.window.name - переменная, в которую можно записать данные на одном сайте, а прочитать уже на другом. Поэтому, во времена frameset, олдфаги использовали имя окна для полноценного междоменного взаимодействия. Сейчас это, конечно же, легаси.name все еще доступна! Использование её в рамках одной вкладки позволяет передавать большое количество данных, тем самым минимизируя вектор атаки. А еще на сервере не залогируется, что именно ты выполнил (тоже забавно).eval(name) (10 байт), а для подключения внешнего скрипта в Chrome import(name) (12 байт).toString=alert;window+1onerror=eval;Uncaught=alert;throw'\x28location\x29';Uncaught как имя функции, в throw его содержимое (в том числе вызов), onerror можно переопределить в eval, а лучше в setTimeout, дабы всякие WAF'ы не ругались (пример). X-Frame-Options, Access-Control-Allow-Origin и вот это всё.Origin или используют различные секреты (типа CSRF токена). Иногда это уже реализовано в библиотеках, но далеко не во всех. Еще забавно, что куки могут быть удалены, сессионный идентификатор может уже давно умереть, а подключение к вебсокету все еще работать./storage/framework/sessions/<svg><hello onload=alert(1337)><svg><script href=data:,alert(1) />