Простая подмена параметров формы, которая может стоить компании миллионов

Простая подмена параметров формы, которая может стоить компании миллионов

Hidden Form Field Manipulation в SPA и старых веб-приложениях

Если форма на сайте выглядит безобидно, это не значит, что она безопасна. Один из примеров — скрытые поля форм (hidden form fields), которые могут хранить важные значения: цену товара, идентификатор пользователя, уровень доступа. Когда такие поля не защищены, злоумышленник может легко изменить их и отправить на сервер уже подменённые данные. Этот метод известен как Hidden Form Field Manipulation.

Сегодня, в мире SPA (Single Page Applications) и «классических» серверных приложений, эта проблема проявляется по-разному, но суть уязвимости неизменна: клиенту доверяют слишком много.

Что такое Hidden Form Field Manipulation

В HTML-формах можно встретить элемент <input type="hidden">. Он не отображается в интерфейсе, но отправляется на сервер при сабмите формы. Разработчики используют его, чтобы передавать вспомогательные данные между страницами без участия пользователя.

Пример простого скрытого поля:

<form method="POST" action="/buy">
     <input type="hidden" name="price" value="100">
     <input type="submit" value="Купить">
 </form>
 

Проблема в том, что пользователь может легко изменить значение этого поля через инструменты разработчика в браузере. Например, вместо 100 поставить 1 и купить товар почти бесплатно.

Почему уязвимость актуальна и сегодня

Можно подумать, что этот трюк из «старой школы» хакерства давно не работает, но практика показывает обратное. В реальных пентестах скрытые поля до сих пор содержат критически важные данные. Причин несколько:

  • Быстрая разработка и копирование старого кода без проверки безопасности.
  • Миграция старых форм в SPA без пересмотра архитектуры.
  • Доверие к клиенту из-за иллюзии «защищенности» JavaScript-кода.
  • Отсутствие серверной валидации.

SPA-фреймворки (React, Angular, Vue) тоже не защищают от этой уязвимости, если логика проверки остается только на фронтенде. Данные в HTML или в сетевых запросах можно перехватить и изменить.

Как атакуют скрытые поля

Сценарий атаки обычно выглядит так:

  1. Открыть страницу с формой и найти скрытые поля через DevTools.
  2. Изменить значение прямо в DOM или через JavaScript в консоли.
  3. Отправить форму с измененными данными.
  4. Если сервер не проверяет значения — атака успешна.

Кроме ручного изменения, злоумышленник может автоматизировать процесс через Postman , cURL или прокси типа Burp Suite .

Пример атаки на SPA

В SPA скрытое поле может находиться в динамически отрисованной форме. Например, кнопка «Купить» вызывает POST-запрос с данными:

{
     "productId": 123,
     "price": 100
 }
 

Если цена берется из скрытого поля на фронтенде, её можно заменить и отправить запрос вручную, минуя UI.

Риски для бизнеса

Hidden Form Field Manipulation может привести к:

  • Финансовым потерям (изменение цены, скидок, налогов).
  • Обходу ограничений (например, изменение уровня доступа).
  • Подмене параметров транзакций.
  • Раскрытию внутренних идентификаторов и бизнес-логики.

В некоторых случаях такая атака используется как элемент цепочки для более сложного взлома: от подделки запросов до эксплуатации логических уязвимостей.

Как защититься

Главный принцип — не доверяйте данным с клиента. Всё, что приходит от пользователя (включая скрытые поля), должно считаться потенциально измененным.

Серверная валидация

  • Все критически важные значения (цены, роли, лимиты) храните и проверяйте на сервере.
  • Сравнивайте присланные значения с данными из базы.
  • Не полагайтесь на скрытые поля как на «источник правды».

Подпись данных

Если по архитектуре нужно передать важные параметры через форму, их можно подписывать на сервере и проверять подпись при получении.

price=100&hash=5d41402abc4b2a76b9719d911017c592
 

Хэш или подпись должен вычисляться на основе секретного ключа, недоступного клиенту.

Использование токенов

Для защиты от CSRF и подмены параметров применяйте одноразовые токены, которые действуют только для одной операции.

Отказ от критичных скрытых полей

В современных приложениях нет необходимости хранить цену или уровень доступа в скрытых полях. Лучше запрашивать эти данные на сервере при отправке формы.

Проверка приложения на уязвимость

Проверить свои формы можно вручную или с помощью инструментов:

  • OWASP ZAP
  • Burp Suite
  • Встроенные инструменты разработчика в браузере

Алгоритм проверки:

  1. Найти все формы с type="hidden".
  2. Изменить значения и отправить форму.
  3. Посмотреть реакцию сервера.

Заключение

Hidden Form Field Manipulation — пример того, как «мелочь» может стоить больших денег. В SPA уязвимость часто маскируется под «безопасную» передачу данных через API, а в старых приложениях она может тянуться годами. Решение одно — жёстко проверять все входящие данные на сервере и проектировать логику так, чтобы критичные значения никогда не зависели от клиента.

Hidden Form Field Manipulation безопасность форм веб-приложения SPA защита от уязвимостей безопасность сайтов
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Хакеры ненавидят этот канал!

Спойлер: мы раскрываем их любимые трюки

Расстройте их планы — подпишитесь