XSS — это такая штука, которую встречаю почти в любом несовершенном проекте. Часто сайты не фильтруют ввод, в результате в поля формы могут заскочить скрипты, и начинается веселье. Чтобы не мучаться, первым делом лучше делать правильное экранирование вывода, то есть htmlspecialchars в PHP или аналог в других языках. Второй важный момент — Content Security Policy (CSP). Да, она не панацея, но сильно снижает шансы внедрения и исполнения внешних скриптов. Еще стоит внимательно смотреть, где и как вставляется пользовательский ввод — избегать вставки в HTML без обработки и внимательно относиться к атрибутам, особенно если они динамические.
Проверять XSS проще всего с помощью готовых Payload’ов из открытых списков и вручную, глядя, что отражается на странице. Отладочные прокси, браузерные инструменты и расширения хорошо помогают. Если CMS или фреймворк, которые используешь, имеют встроенные механизмы защиты (например, шаблонизаторы с автоматическим экранированием), лучше ими и пользоваться, а не изобретать велосипед.
В итоге, на практике минимум — это фильтрация и экранирование вывода + жесткие заголовки CSP. Самое сложное — не запутаться в месте, куда вставляешь данные, чтобы не пропустить места для инъекций. Кто как подстраховывается? Какие инструменты юзаете?