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

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

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 не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
310K
долларов
до 18 лет
Антипов жжет
Ребёнок как убыточный
актив. Считаем честно.
Почему рожают меньше те, кто умеет считать на десять лет вперёд.

FREE
100%
Кибербезопасность · Обучение
УЧИСЬ!
ИЛИ
ВЗЛОМАЮТ
Лучшие ИБ-мероприятия
и вебинары — в одном месте
ПОДПИШИСЬ
T.ME/SECWEBINARS