РКН Аудит РКН Аудит

безопасность сайта 152-ФЗ ФСТЭК личный кабинет утечки

Защита от CSRF-атак: почему подделка межсайтового запроса — это риск для персональных данных на сайте

· 9 мин чтения · Редакция РКН Аудит

CSRF — это подделка межсайтового запроса: чужая страница заставляет браузер вошедшего пользователя выполнить действие на вашем сайте, а браузер сам прикладывает к запросу сессионные cookie. Для персональных данных это опасно не «утечкой базы», а тихой сменой контактов в личном кабинете: подменив адрес почты или телефон, атакующий перехватывает восстановление пароля и получает доступ к профилю с заказами, адресами и историей. Слова «CSRF» в 152-ФЗ нет, но обязанность предотвращать несанкционированный доступ есть — в статье 19 152-ФЗ и в приказе ФСТЭК №21.

Проверить бесплатно, какие нарушения 152-ФЗ видны на вашем сайте и в его формах


Как работает CSRF и почему сервер ему верит?

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

Браузер по умолчанию прикладывает cookie вашего домена к запросам на этот домен и исторически делал это независимо от того, с какой страницы запрос отправлен. Современные браузеры это сузили: атрибут SameSite со значением Lax применяется по умолчанию и отсекает кросс-сайтовые POST-запросы. Остаются изменяющие GET-переходы, поддомены и приложения с ослабленной настройкой cookie — и в этих случаях сервер получает корректную сессию, видит валидного пользователя и выполняет действие.

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

Как CSRF превращается в доступ к персональным данным?

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

  1. Смена адреса электронной почты в профиле. Дальше атакующий запускает восстановление пароля, письмо приходит ему, и личный кабинет со всей историей заказов, адресами доставки и телефоном переходит под его контроль.
  2. Привязка другого номера телефона — тот же сценарий, но через СМС-код.
  3. Смена пароля, если форма не требует ввести текущий.
  4. Добавление второго администратора в панели управления сайтом: после этого доступ есть ко всем данным всех пользователей сразу.
  5. Изменение адреса доставки в оформленном заказе — данные не утекают, но товар уходит не туда, а сам факт подмены обнаруживается поздно.
  6. Запуск выгрузки в интерфейсах, где экспорт выполняется по ссылке: если ссылка на выгрузку в 10 000 записей открывается обычным GET-запросом, её можно инициировать со стороны.
  7. Отписка или отзыв согласия от имени человека — редкий, но неприятный сценарий: оператор теряет основание обработки и не понимает почему.

Первые три пункта — это перехват учётной записи пользователя, четвёртый — несанкционированное получение административного доступа. И то и другое по смыслу части 3.1 статьи 21 152-ФЗ вполне может оказаться неправомерным предоставлением доступа к персональным данным: норма говорит о «неправомерной или случайной передаче (предоставлении, распространении, доступе)» персональных данных. Если такое событие повлекло нарушение прав субъектов, запускаются сроки уведомления Роскомнадзора: первое уведомление — в течение 24 часов с момента выявления инцидента. Обратите внимание, что «обнаружение фактов несанкционированного доступа» из пункта 6 части 2 статьи 19 152-ФЗ — это требование к мерам защиты, а не самостоятельное основание для 24-часового уведомления. Порядок действий разобран в статье «Как обнаружить утечку персональных данных».

Что требуют от оператора нормы, если про CSRF в них ничего нет?

Нормативные акты по персональным данным не перечисляют техники атак — они формулируют классы мер. Это регулярно даёт повод сказать «в законе про CSRF ничего нет, значит, не обязаны», и это неверное чтение.

Статья 19 152-ФЗ обязывает оператора принимать меры, необходимые для защиты данных от неправомерного доступа, и называет среди них обнаружение фактов несанкционированного доступа, установление правил доступа к данным в информационной системе и регистрацию действий с ними, а также восстановление данных, модифицированных или уничтоженных вследствие несанкционированного доступа.

Постановление Правительства №1119 определяет уровень защищённости информационной системы — от 4 до 1, в зависимости от категории данных, типа актуальных угроз и числа субъектов. Уровень задаёт, какой набор мер обязателен.

Приказ ФСТЭК №21 раскрывает состав мер по группам: идентификация и аутентификация, управление доступом, регистрация событий безопасности, защита информационной системы и её компонентов. Защита от подделки запроса живёт внутри этих групп — оператор сам выбирает конкретные механизмы под актуальные угрозы. Что из приказа реально применимо к сайту, разобрано в статье «Приказ ФСТЭК №21: что касается владельца сайта».

Практический смысл этой конструкции: инспектор не спросит «есть ли у вас CSRF-токен». Он спросит, определён ли уровень защищённости, какие угрозы признаны актуальными и какими мерами они закрыты. Действия от имени вошедшего пользователя без его ведома — угроза, которую тяжело объявить неактуальной для сайта с личным кабинетом.

Какие защиты от CSRF действительно работают?

Ни одна мера не закрывает вопрос в одиночку. Рабочая конфигурация — несколько слоёв.

Мера Что делает Ограничения
CSRF-токен в форме Сервер кладёт в форму случайное значение, привязанное к сессии, и принимает запрос только с ним Бесполезен при наличии XSS: чужой скрипт прочитает токен со страницы
Атрибут SameSite у сессионной cookie При значении Lax браузер не отправляет cookie при кросс-сайтовых POST-запросах, при Strict — при любых переходах со стороннего сайта Lax пропускает cookie при обычном переходе по ссылке, поэтому изменяющие GET-запросы и доверенные поддомены не закрывает
Только POST для изменяющих действий Действие нельзя запустить переходом по ссылке или загрузкой картинки Требует переделки старых интерфейсов с «ссылками-действиями»
Проверка заголовков Origin и Referer Сервер отклоняет запрос с чужого источника Заголовки могут отсутствовать; нужна аккуратная обработка пустого значения
Повторная аутентификация Смена почты, телефона и пароля требует ввести текущий пароль или код Заметна пользователю, поэтому применяется точечно
Корректный CORS Сервер не разрешает кросс-доменные запросы с произвольных источников Настройка «разрешить всё» превращает меру в её отсутствие
Короткая жизнь сессии Уменьшает окно, в котором атака возможна Не устраняет саму уязвимость

Отдельная строка — флаги сессионной cookie: HttpOnly не даёт прочитать её скриптом, Secure запрещает передачу по незащищённому соединению. К CSRF они относятся косвенно, но без них любая другая мера обесценивается.

Как проверить свой сайт без пентеста?

Полноценная проверка — работа специалиста, но несколько вещей владелец сайта видит сам.

  1. Откройте форму в личном кабинете и посмотрите исходный код страницы. Скрытое поле с длинным случайным значением — признак, что токен есть. Полное отсутствие такого поля во всех формах — плохой знак.
  2. Проверьте свойства сессионной cookie в инструментах разработчика: должны быть HttpOnly, Secure и SameSite.
  3. Найдите действия, выполняющиеся по ссылке. Если удаление адреса или отписка срабатывают простым переходом по URL, это готовая точка для подделки запроса.
  4. Проверьте, требует ли смена почты и пароля ввода текущего пароля. Если нет — это первое, что нужно исправить, безотносительно CSRF.
  5. Спросите разработчика, какой механизм защиты используется. У современных фреймворков он встроен, но у самописных кабинетов и старых шаблонов CMS часто отключён «чтобы не мешал».
  6. Проверьте, включена ли в CMS регистрация действий пользователей — без журнала вы не установите, когда и откуда менялись контакты в профиле.

Пункты 1–4 занимают около получаса, если доступ к сайту у вас есть; пункты 5 и 6 зависят от разработчика и от того, как настроена CMS.

Чем CSRF отличается от XSS и что тут делает CSP?

Эти три аббревиатуры постоянно смешивают, а меры у них разные.

CSRF XSS
Суть Действие от имени пользователя Выполнение чужого кода на вашей странице
Что использует Доверие сервера к сессии Доверие браузера к вашему домену
Читает ли данные Нет, действует вслепую Да, включая содержимое форм
Основная защита Токен, SameSite, проверка источника Экранирование вывода, Content Security Policy

Content Security Policy — инструмент против XSS и против утечки данных из форм на сторонние домены; на подделку межсайтового запроса он почти не влияет. Как этот заголовок настраивается и что именно он закрывает, разобрано в статье «Content Security Policy: как заголовок защищает персональные данные».

Отсюда практический вывод о порядке работ: закрывать сначала XSS, затем CSRF, а не наоборот — пока на странице может выполниться чужой скрипт, токен ему не помеха.

Какие ошибки встречаются чаще всего?

  • Токен есть, но сервер его не проверяет. Поле выводится в форму, а обработчик принимает запрос и без него — частый результат быстрой правки «чтобы заработало».
  • Один токен на всех пользователей или токен, не привязанный к сессии: формально мера есть, практически её нет.
  • Изменяющие действия через GET — наследие старых админок.
  • CORS, настроенный «разрешить любой источник» ради интеграции, которую давно отключили.
  • Защита есть в основном приложении, но не в API, к которому ходит мобильное приложение или личный кабинет на JavaScript.
  • Нет журнала действий, поэтому подмену контактов невозможно ни заметить, ни расследовать. Что минимально нужно логировать, собрано в статье «Расследование утечки персональных данных».

С чего начать

Безопасность личного кабинета — внутренняя работа, и снаружи её не видно. Зато снаружи прекрасно видно другое: какие формы собирает сайт, какие сторонние скрипты работают на страницах с этими формами, открывается ли политика обработки и совпадает ли она с реальным составом данных. Это те же нарушения, которые первыми находит автоматизированный мониторинг Роскомнадзора, и начинать разумно с них — они дешевле и закрываются быстрее.

Бесплатный скан на rkn-ok.ru проверит внешний контур за 30 секунд, а защиту от подделки запроса поставьте в задачу разработчику вместе со списком из раздела выше.

→ Проверить сайт на нарушения 152-ФЗ (бесплатно, 30 секунд)


Что читать дальше


Источники: Федеральный закон №152-ФЗ «О персональных данных» — статьи 19, 21; постановление Правительства №1119 от 01.11.2012; приказ ФСТЭК №21 от 18.02.2013.

Частые вопросы

Что такое CSRF простыми словами?

Это подделка межсайтового запроса. Пользователь вошёл в личный кабинет вашего сайта, затем открыл в соседней вкладке чужую страницу, и та отправляет на ваш сайт запрос от его имени — браузер автоматически прикладывает к запросу сессионные cookie. Сервер видит корректную сессию и выполняет действие: меняет адрес электронной почты, привязывает другой телефон, оформляет заказ. Человек при этом ничего не нажимал на вашем сайте.

Упоминается ли CSRF в 152-ФЗ или в приказах ФСТЭК?

По названию — нет, и это нормально: нормативные акты формулируют требования на уровне классов мер, а не конкретных техник атаки. Статья 19 152-ФЗ требует принимать меры, в том числе обнаруживать факты несанкционированного доступа и устанавливать правила доступа с регистрацией действий. Приказ ФСТЭК №21 раскрывает это через группы мер — идентификация и аутентификация, управление доступом, защита информационной системы и её компонентов. Защита от подделки запроса относится к этим группам.

Достаточно ли поставить SameSite=Lax на cookie, чтобы закрыть CSRF?

Это сильная мера, но не полная. Атрибут SameSite со значением Lax не даёт браузеру отправлять cookie при кросс-сайтовых POST-запросах, что закрывает самый массовый сценарий. Он не спасает, если изменяющее действие выполняется обычным GET-переходом, если на сайте есть поддомены под контролем третьих лиц или если приложение принимает запросы с любым источником из-за неверно настроенного CORS. Рабочая конфигурация — SameSite вместе с CSRF-токеном, а не вместо него.

Чем CSRF отличается от XSS?

XSS выполняет чужой код на вашей странице и может прочитать данные пользователя прямо в браузере. CSRF ничего не читает: он вслепую отправляет действие от имени пользователя и использует доверие сервера к его сессии. Отсюда разница в защите: против XSS работает экранирование вывода и Content Security Policy, против CSRF — токены, атрибут SameSite и проверка источника запроса. Наличие XSS при этом сводит защиту от CSRF почти к нулю: код, выполняющийся на вашей странице, спокойно прочитает токен.

Как проверить, есть ли у сайта защита от CSRF, если я не разработчик?

Самая простая проверка — открыть в браузере исходный код страницы с формой в личном кабинете и поискать скрытое поле с длинным случайным значением: это и есть CSRF-токен. Вторая проверка — посмотреть в инструментах разработчика свойства сессионной cookie: у неё должны стоять флаги HttpOnly, Secure и атрибут SameSite. Третья — убедиться, что действия, меняющие данные, не выполняются по обычной ссылке. Всё остальное требует участия разработчика.

Проверьте свой сайт на нарушения 152-ФЗ

Бесплатный скан за 30 секунд. 14 типов нарушений 152-ФЗ.

Запустить →

Похожие статьи

2026-09-19 · 10 мин

Как провести аудит обработки персональных данных: пошаговая инструкция

Пошаговый порядок самопроверки оператора: инвентаризация процессов и форм, выбор правового основания по статье 6 152-ФЗ, сверка целей, сроки хранения и уничтожение, договоры поручения с подрядчиками, уведомление Роскомнадзора и проверка сайта. Что оформить документом на каждом шаге.

2026-09-19 · 10 мин

Внеплановая проверка Роскомнадзора: основания и порядок в 2026 году

На каких основаниях Роскомнадзор проводит внеплановое контрольное мероприятие по персональным данным, чем инспекционный визит отличается от документарной и выездной проверки, что согласуется с прокуратурой, сколько длится проверка и как оператору к ней подготовиться.