Что такое межсайтовый скриптинг?

Один из наиболее распространенных классов уязвимостей веб-сайтов называется «Межсайтовый скриптинг» или «XSS». Уязвимости XSS - это то, где пользователь может вызвать выполнение JavaScript. Существует ряд различных вариантов XSS-уязвимости с разной степенью серьезности.

Проблема с тем, что злоумышленник может выполнять JavaScript в сеансах других пользователей, заключается в том, что в этом случае злоумышленник может что-либо сделать с веб-сайтом, который видят жертвы. Сюда входит перенаправление жертв на внешние веб-сайты, кража токенов аутентификации и мониторинг платежных данных.

Самая серьезная форма XSS-уязвимости - это «хранимые» или «постоянные» межсайтовые сценарии, именно здесь злоумышленник может создать полезную нагрузку XSS, а затем отправить ее, чтобы она была сохранена в базе данных. Если XSS-эксплойт сохранен в базе данных, он может повлиять на других пользователей в течение длительного периода времени.

Другой формой межсайтового скриптинга является «Отраженный», этот тип не сохраняется ни на каком этапе, вместо этого полезная нагрузка включается в браузер. Как правило, этот тип XSS является частью фишинговых атак, когда злоумышленник пытается обманом заставить жертву перейти по вредоносной ссылке.

Как правило, большинство атак XSS в какой-то момент отправляют полезную нагрузку на сервер, но некоторые атаки чисто на стороне клиента, никогда не отправляется на сервер и вместо этого влияет только на сторону клиента JavaScript. Это называется XSS на основе DOM, поскольку он остается в объектной модели документа JavaScript или DOM. Этот тип уязвимости особенно сложно идентифицировать и устранить, поскольку серверы никогда не видят эксплойты и не могут быть зарегистрированы.

Исторически метод предотвращения уязвимостей XSS заключается в фильтрации всех данных, отправленных пользователем, с использованием списков блокировки для отклонения любых сообщений со значимыми символами или словами в JavaScript. Это, как правило, приводило к гонке вооружений в поисках обходов фильтра, а также препятствовало некоторым законным отправкам пользователей. Правильное решение - использовать сущности HTML для кодирования данных, отправленных пользователем. с включенными модулями сущностей HTML символы автоматически кодируются в формат, в котором браузер знает, что нужно отображать их как правильные символы, но не обрабатывать их как код.