Ответ
XSS (Cross-Site Scripting) — уязвимость, позволяющая злоумышленнику внедрять вредоносный код (обычно JavaScript) на страницы, которые видят другие пользователи.
Типы XSS:
- Reflected — скрипт попадает в запрос (например, URL) и выполняется при отображении страницы.
- Stored — вредоносный код сохраняется на сервере (например, в комментариях) и выполняется при каждом открытии страницы.
- DOM-based — атака происходит полностью на стороне клиента через манипуляции с DOM.
Пример уязвимого кода:
// Опасный код, если `userInput` не экранирован
document.getElementById('output').innerHTML = userInput;
Защита:
- Экранирование данных (
textContentвместоinnerHTML) - Использование Content Security Policy (CSP)
- Валидация и санитизация ввода
- HTTP-заголовки типа
X-XSS-Protection
Ответ 18+ 🔞
Да ты посмотри, какая интересная хуйня! XSS, блядь, Cross-Site Scripting, а по-нашему — «межсайтовый скриптинг». Представь себе картину: сидит злоумышленник, такой хитрожопый пидарас, и втихаря лепит свой вредоносный код на странички, которые потом смотрят нормальные люди. И всё это на JavaScript, ёпта! Просто праздник какой-то.
Какие бывают, эти ваши XSS, блядь:
- Reflected (Отражённый) — это когда скрипт, сука, прилетает прямо в запросе, ну, в URL, например. Страница его подхватывает, отображает — и тут тебе пиздец, выполняется. Как будто зеркало подставили, а в него хуй с горы летит.
- Stored (Хранимый) — вот это уже поинтереснее. Этот гадский код, блядь, сохраняется прямо на сервере! В комментариях, в профиле, в посте. И каждый раз, когда кто-то эту страницу открывает — оп-па, сюрприз! Как долгоиграющая жопа, которая ждёт своего часа.
- DOM-based (На основе DOM) — а это, блядь, высший пилотаж. Вся атака происходит прямо у пользователя в браузере, через манипуляции с этой вашей DOM-структурой. Сервер тут вообще ни при чём, чистая клиентская подстава.
Вот, смотри, как это выглядит в коде, если накосячить:
// Опасно, блядь, опасно! Если `userInput` не обработать, будет пиздец.
document.getElementById('output').innerHTML = userInput;
Вот взял и вставил что прислали, а там, глядишь, уже скрипт висит, который куки ворует. Красота, да? Сам от себя охуеешь.
Как от этого спасаться, чтобы не обосраться:
- Экранирование, ёпта! Вместо
innerHTMLюзайtextContent. Не для того тебе мозги даны, чтобы всякую хуйню в HTML пихать. - Content Security Policy (CSP) — это, блядь, как шлагбаум с вооружённой охраной для твоего сайта. Говоришь браузеру, откуда можно скрипты грузить, а откуда — ни хуя.
- Валидация и санитизация ввода. Проверяй, что тебе шлют, прежде чем принимать. Не всякий userInput — подарок судьбы, иногда это просто манда с ушами.
- HTTP-заголовки, типа
X-XSS-Protection. Старая, конечно, школа, но иногда и палка помогает.
Вот и вся наука. Не уследишь — будет тебе не сайт, а цирк с конями, где каждый проходящий может на стене хуй нарисовать.