Доминирование JavaScript в вебе создало новые поля сражений в области кибербезопасности. Классическое понимание межсайтового скриптинга (XSS) устарело, поскольку злоумышленники разработали более изощренные методы атак. Современные фреймворки, включая React, Vue и Angular, не являются неуязвимыми для новых угроз, таких как инъекции в промпты искусственного интеллекта (AI Prompt Injection), компрометация цепочек поставок, загрязнение прототипа (Prototype Pollution) и DOM-based XSS, которые обходят традиционные серверные проверки в одностраничных приложениях.

Масштаб и сложность современных угроз были продемонстрированы в июне 2024 года в ходе атаки на цепочку поставок . Этот инцидент, названный «крупнейшей JavaScript-инъекцией года», затронул более 100 000 веб-сайтов. После того как доверенная библиотека была приобретена китайской компанией, новые владельцы использовали её для внедрения вредоносного кода на все использующие её ресурсы. Среди жертв оказались такие компании, как Hulu, Mercedes-Benz и WarnerBros.
Статистика подтверждает ускоряющийся рост уязвимостей. К середине 2024 года было зарегистрировано 22 254 уязвимости (CVE), что на 30% больше, чем в 2023 году, и на 56% больше, чем в 2022 году. Учитывая, что 98% всех сайтов используют JavaScript на стороне клиента, а для 67,9% разработчиков он является основным языком программирования, поверхность атаки продолжает экспоненциально расширяться.
Даже современные фреймворки с встроенной защитой, такие как React, содержат функции, которые при неправильном использовании создают уязвимости. Яркий пример — функция
Для предотвращения подобных атак рекомендуется использовать специализированные библиотеки для очистки данных, например DOMPurify. Этот инструмент анализирует HTML-содержимое, удаляет весь потенциально вредоносный код, включая исполняемые скрипты, и сохраняет только безопасные теги форматирования, такие как
Финансовый сектор является основной целью для адаптивных вредоносных программ. В марте 2023 года отчёт IBM зафиксировал кампанию, нацеленную на более чем 40 банков в Северной и Южной Америке, Европе и Японии. В результате было скомпрометировано свыше 50 000 пользовательских сессий. Вредоносное ПО использовало сложные JavaScript-инъекции, способные распознавать структуру страниц банковских сайтов и динамически внедрять скрипты для кражи учётных данных и одноразовых паролей.
Эти программы демонстрировали продвинутые возможности: адаптивное поведение с постоянной связью с командными серверами (C2) для корректировки тактики, сложную обфускацию для сокрытия вредоносного кода и методы уклонения, которые удаляли следы своего присутствия и избегали выполнения при обнаружении защитного ПО.
Ключевым принципом защиты является «Хранить в сыром виде, кодировать на выводе». Данные должны храниться в базе данных в исходной, некодированной форме. Кодирование применяется только в момент отображения и должно соответствовать контексту: HTML-сущности для контента HTML, экранирование JavaScript для скриптов, URL-кодирование для ссылок и CSS-экранирование для таблиц стилей. Это предотвращает ошибки двойного кодирования и обеспечивает целостность данных.
Безопасность — это не контрольный список, а непрерывный процесс построения многоуровневой защиты. Основные правила этого подхода: никогда не доверять клиентскому коду, всегда проводить валидацию на стороне сервера и кодировать данные в зависимости от контекста их использования.
Новые технологии также вводят свои риски. WebAssembly (Wasm), несмотря на производительность и изолированную среду выполнения (sandbox), не является панацеей. Код, скомпилированный из небезопасных по управлению памятью языков, таких как C/C++, может переносить в Wasm уязвимости, например, переполнение буфера. Бинарный формат Wasm сложнее для аудита, чем читаемый JavaScript, и создаёт новые поверхности для атак, включая сайд-ченнел атаки.
Интеграция искусственного интеллекта и больших языковых моделей (LLM) в веб-приложения породила новый класс уязвимостей — атаки с использованием инъекций в промпты. В этом сценарии злоумышленник создаёт специальный запрос (промпт), который заставляет модель ИИ генерировать и выполнять вредоносный JavaScript в браузере пользователя, открывая ещё один вектор для атак.
Для углубленного изучения доступны специализированные материалы, включая 47-страничное руководство в формате PDF, которое содержит методы защиты для конкретных фреймворков, примеры кода из реальных сценариев и дорожную карту по внедрению мер безопасности.

Изображение носит иллюстративный характер
Масштаб и сложность современных угроз были продемонстрированы в июне 2024 года в ходе атаки на цепочку поставок . Этот инцидент, названный «крупнейшей JavaScript-инъекцией года», затронул более 100 000 веб-сайтов. После того как доверенная библиотека была приобретена китайской компанией, новые владельцы использовали её для внедрения вредоносного кода на все использующие её ресурсы. Среди жертв оказались такие компании, как Hulu, Mercedes-Benz и WarnerBros.
Статистика подтверждает ускоряющийся рост уязвимостей. К середине 2024 года было зарегистрировано 22 254 уязвимости (CVE), что на 30% больше, чем в 2023 году, и на 56% больше, чем в 2022 году. Учитывая, что 98% всех сайтов используют JavaScript на стороне клиента, а для 67,9% разработчиков он является основным языком программирования, поверхность атаки продолжает экспоненциально расширяться.
Даже современные фреймворки с встроенной защитой, такие как React, содержат функции, которые при неправильном использовании создают уязвимости. Яркий пример — функция
dangerouslySetInnerHTML
. Она намеренно обходит встроенные механизмы очистки React для прямой вставки HTML в DOM. Эксплуатация этой уязвимости может привести к краже аутентификационных cookie и токенов сессий, выполнению действий от имени пользователя, перенаправлению на вредоносные сайты и перехвату конфиденциальных данных, таких как пароли и номера кредитных карт. Для предотвращения подобных атак рекомендуется использовать специализированные библиотеки для очистки данных, например DOMPurify. Этот инструмент анализирует HTML-содержимое, удаляет весь потенциально вредоносный код, включая исполняемые скрипты, и сохраняет только безопасные теги форматирования, такие как
<b>
, <i>
и <p>
. Такой подход обеспечивает безопасное отображение пользовательского контента. Финансовый сектор является основной целью для адаптивных вредоносных программ. В марте 2023 года отчёт IBM зафиксировал кампанию, нацеленную на более чем 40 банков в Северной и Южной Америке, Европе и Японии. В результате было скомпрометировано свыше 50 000 пользовательских сессий. Вредоносное ПО использовало сложные JavaScript-инъекции, способные распознавать структуру страниц банковских сайтов и динамически внедрять скрипты для кражи учётных данных и одноразовых паролей.
Эти программы демонстрировали продвинутые возможности: адаптивное поведение с постоянной связью с командными серверами (C2) для корректировки тактики, сложную обфускацию для сокрытия вредоносного кода и методы уклонения, которые удаляли следы своего присутствия и избегали выполнения при обнаружении защитного ПО.
Ключевым принципом защиты является «Хранить в сыром виде, кодировать на выводе». Данные должны храниться в базе данных в исходной, некодированной форме. Кодирование применяется только в момент отображения и должно соответствовать контексту: HTML-сущности для контента HTML, экранирование JavaScript для скриптов, URL-кодирование для ссылок и CSS-экранирование для таблиц стилей. Это предотвращает ошибки двойного кодирования и обеспечивает целостность данных.
Безопасность — это не контрольный список, а непрерывный процесс построения многоуровневой защиты. Основные правила этого подхода: никогда не доверять клиентскому коду, всегда проводить валидацию на стороне сервера и кодировать данные в зависимости от контекста их использования.
Новые технологии также вводят свои риски. WebAssembly (Wasm), несмотря на производительность и изолированную среду выполнения (sandbox), не является панацеей. Код, скомпилированный из небезопасных по управлению памятью языков, таких как C/C++, может переносить в Wasm уязвимости, например, переполнение буфера. Бинарный формат Wasm сложнее для аудита, чем читаемый JavaScript, и создаёт новые поверхности для атак, включая сайд-ченнел атаки.
Интеграция искусственного интеллекта и больших языковых моделей (LLM) в веб-приложения породила новый класс уязвимостей — атаки с использованием инъекций в промпты. В этом сценарии злоумышленник создаёт специальный запрос (промпт), который заставляет модель ИИ генерировать и выполнять вредоносный JavaScript в браузере пользователя, открывая ещё один вектор для атак.
Для углубленного изучения доступны специализированные материалы, включая 47-страничное руководство в формате PDF, которое содержит методы защиты для конкретных фреймворков, примеры кода из реальных сценариев и дорожную карту по внедрению мер безопасности.