Защита персональных данных в веб-приложениях: шифрование, доступ, журнал действий и удаление

Защита персональных данных в веб-приложении начинается не с шифрования, а с ответа на вопрос, какие данные у вас вообще есть и где они лежат. Мы составляем карту данных, проверяем, как они хранятся, кому видны и куда уходят, и дорабатываем приложение: шифрование, права, журнал действий, сроки хранения, удаление по запросу. Юридическую часть (политики, уведомления, статус оператора) ведёт юрист заказчика, мы отвечаем за техническую.

Обследование данных — от 200 000 ₽, 2–3 неделиМеры в виде проверяемых требований, а не общих словДанные и ключи остаются на ваших серверах

С чем приходят

Когда вопрос о персональных данных становится технической задачей

Юрист просит описать технические меры

Политика готова, а на вопрос «как защищены данные» разработчик отвечает «используем HTTPS». Нужен документ, где меры привязаны к конкретным полям и системам.

Запускается кабинет или SaaS

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

Клиент прислал опросник

Вопросы о шифровании, журнале, сроках хранения и удалении данных. Ответ должен совпадать с тем, как приложение работает на самом деле.

Данные оказались там, где их не ждали

Паспортные данные в журнале ошибок, выгрузка клиентов на тестовом стенде, файл в общей папке. Нужно найти все такие места и закрыть источник.

Основа

Карта данных: с неё начинается любая защита

Нельзя защитить то, что не перечислено. Карта данных — это таблица, по которой потом проверяется каждая мера.

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

Где данные прячутся

  • Журналы приложения и сервера. Адрес запроса с почтой в параметре, тело запроса с телефоном, трассировка ошибки с полями формы.
  • Резервные копии. Полная копия базы лежит дольше самой записи и часто защищена хуже основной базы.
  • Тестовые стенды. Выгрузку с боевой базы «для проверки» оставляют навсегда, и доступ к стенду у всех разработчиков.
  • Аналитика и сторонние виджеты. Скрипты подгружают на страницы с формами и получают всё, что на них отображается.
  • Файлы. Сканы документов, вложения, выгрузки отчётов в общих папках и во временных каталогах.

Результат — документ, который можно отдать юристу и службе безопасности, и список мест, где данные лежат без нужды. Для кабинетов эта работа входит в разработку личного кабинета, для продуктов с чужими клиентами — в разработку SaaS-платформы.

Меры

Технические меры по слоям: что делаем и как принимаем

Заготовка для разбора: на вашем приложении строки будут другими, вопросы те же. Каждая мера должна проверяться, иначе она остаётся словами в документе.

Слой
Мера
Как делаем
Как принимаем
СлойПередачаканал связи
МераЗащищённое соединение на всех адресах, включая внутренние обмены между сервисами
Как делаемШифрование TLS везде; ключи сайта обновляются по расписанию; незащищённые адреса перенаправляются или закрыты
Как принимаемПроверка конфигурации и обход адресов приложения: нет ни одного без шифрования
СлойХранениебаза и файлы
МераШифрование диска или тома плюс отдельные поля с повышенным риском шифруются в самом приложении
Как делаемПаспортные данные и подобные поля хранятся зашифрованными, поиск по ним идёт через отдельный хеш
Как принимаемЧтение таблиц напрямую даёт нечитаемое значение; ключ лежит отдельно от базы
СлойПаролиучётные записи
МераХранится только результат медленного хеширования с солью, сами пароли нигде не сохраняются
Как делаемАлгоритм argon2, bcrypt или scrypt с настройкой под ваше оборудование
Как принимаемОбразец базы не позволяет восстановить пароль; смена алгоритма не требует сброса всех паролей
СлойДоступроли и объекты
МераПринцип необходимости: каждый видит только то, что нужно для работы, права проверяет сервер
Как делаемРоли, организации, объекты и поля; доступ к полной карточке и к выгрузке разделены
Как принимаемПрогон из-под каждой роли: попытка открыть чужие записи по прямым адресам
Шифрование

Что шифровать, где хранить ключи и чего шифрование не даёт

Шифрование диска защищает от кражи самого сервера или тома: украденный носитель нечитаем. От запроса в базу под действующей учётной записью оно не защищает, потому что база расшифровывает данные сама. Поэтому для самых чувствительных полей добавляется шифрование на уровне приложения: база хранит нечитаемое значение, а ключ у приложения, отдельно от базы.

  • Поля, а не всё подряд. Шифрование каждого столбца усложняет поиск и отчёты. Выбираем поля, где риск высок (документы, реквизиты), остальное защищаем правами и шифрованием диска.
  • Поиск по зашифрованному. Для точного совпадения хранится отдельный хеш с секретным ключом.
  • Ключи отдельно от данных. Ключ в той же базе, что и данные, превращает шифрование в формальность. Ключи живут в хранилище секретов, есть порядок замены и план на случай утечки ключа.
  • Обезличивание и псевдонимизация. Для аналитики и стендов идентификаторы заменяются случайными значениями, связь хранится отдельно и под более строгим доступом.

Если по требованиям заказчика нужна сертифицированная криптография, средства и их настройку обеспечивает заказчик или организация с лицензией; мы встраиваем вызовы в код приложения, но лицензируемых работ по защите информации не проводим.

Журнал

Журнал действий пользователей: что писать, а что нельзя

Журнал нужен, чтобы после происшествия ответить на вопрос «кто, что и когда». Плохой журнал сам превращается в утечку.

Событие
Что записываем
Чего в журнале быть не должно
Как хранится
СобытиеВход и смена доступауспех и неудачи
Что записываемВремя, пользователь, способ входа, адрес, смена пароля и прав, подключение второго фактора
Чего в журнале быть не должноПароли, коды подтверждения, токены сессий
Как хранитсяТолько добавление записей; срок хранения записан в регламенте
СобытиеПросмотр карточкиперсональные данные
Что записываемКто открыл карточку человека, когда и по какому основанию (обращение, заказ)
Чего в журнале быть не должноСодержимое карточки: достаточно идентификатора записи
Как хранитсяОтдельно от журнала ошибок, с более узким доступом
СобытиеИзменение и удалениеправки данных
Что записываемКто, что изменил, какие поля, старое и новое значение для не чувствительных полей
Чего в журнале быть не должноСтарые и новые значения чувствительных полей: пишем факт изменения без содержимого
Как хранитсяНеизменяемое хранение; правка записей журнала невозможна даже администратору
СобытиеВыгрузка и массовые операцииэкспорт, импорт, рассылки
Что записываемКто запросил, какой фильтр, сколько записей, куда отправлено
Чего в журнале быть не должноСам файл выгрузки
Как хранитсяОповещение ответственному при выгрузке выше порога, который задаёте вы
СобытиеДействия поддержкивход «от имени клиента»
Что записываемКто из сотрудников и зачем вошёл от имени клиента; что открывал
Чего в журнале быть не должноПароль клиента: он поддержке не нужен
Как хранитсяКлиент видит такие входы в своём кабинете, если это решено на обследовании
Тихие утечки

Четыре места, которые чаще всего забывают

Журналы ошибок и отладки

Исключение печатает объект целиком, и в журнале оказываются телефон и адрес. Маскируем поля при записи и запрещаем отладочный вывод персональных данных в боевой среде.

Тестовые стенды и копии базы

Данные для стенда обезличиваются при выгрузке: имена, телефоны и документы заменяются, структура и объёмы сохраняются.

Резервные копии

Копии шифруются, хранятся отдельно от основного сервера, а восстановление проверяется. Срок жизни копий записан: удалённые по запросу данные уходят из копий по истечении этого срока.

Внешние сервисы

Аналитика, карты, чат-виджеты, почтовые рассылки, внешние ИИ-сервисы получают данные, о которых вы можете не помнить. Для каждого записано, что и куда отправляется.

Жизненный цикл

Хранение, выгрузка и удаление: что должно уметь приложение

Человек вправе запросить свои данные, исправить их или потребовать удаления. Техническая часть этих запросов — в приложении, а решение по каждому остаётся за вашим юристом.

Событие
Что умеет приложение
Подводный камень
Что решаем на обследовании
СобытиеЗапрос данныхвыгрузка по человеку
Что умеет приложениеСобирает всё, что известно о человеке, из базы, файлов и подключённых систем в понятном виде
Подводный каменьДанные размазаны по пяти таблицам и двум внешним системам, и полного списка нет
Что решаем на обследованииПеречень мест, откуда собирается ответ, и ответственные
СобытиеИсправлениеправка и история
Что умеет приложениеИзменение поля с записью в журнале; копии в других системах обновляются
Подводный каменьИсправили в кабинете, а в учёте и CRM остался старый вариант
Что решаем на обследованииКакая система главная и как правка доходит до остальных
СобытиеУдалениестирание или обезличивание
Что умеет приложениеУдаление записи вместе со связанными файлами или замена идентифицирующих полей, если запись нужна для учёта
Подводный каменьДанные остаются в журналах, поиске, кэше и копиях; связи ломают целостность
Что решаем на обследованииЧто удаляется физически, что обезличивается и в какой срок уходит из копий
СобытиеСрок храненияавтоматическая очистка
Что умеет приложениеПлановое удаление или обезличивание записей по истечении срока
Подводный каменьСрок никто не поставил, и данные копятся годами
Что решаем на обследованииСрок по каждой категории данных; сам срок определяет юрист
Что делаем

Из чего состоит работа и сколько она стоит

Цены — по тарифам. Обследование вычитается из первого этапа, если продолжаете с нами. Работы дешевле 150 000 ₽ мы не берём.

Обследование: одно приложение

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

200 000 ₽ · 2–3 недели

Обследование: несколько систем

Кабинет, учёт, CRM, склад и внешние сервисы вместе: карта потоков данных, матрица источников и владельцев.

350 000 ₽ · 3–4 недели

Доработка приложения под меры

Шифрование полей, права и маскирование, журнал действий, очистка и удаление, обезличивание стендов. Этапами, каждый со своей приёмкой.

после обследования · от 150 000 ₽

Защита в новом продукте

Меры закладываются в проект с первого этапа вместе с кабинетом или SaaS. Нижняя граница кабинета совпадает со страницей порталов.

от 250 000 ₽ · в составе проекта

Сопровождение

Проверка журналов, обновление зависимостей и ключей, разбор обращений. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

Дни 1–5 — Карта данных

Поля, системы, потоки и владельцы. Выясняем, какие данные собираются без нужды и куда они уходят.

Недели 1–2 — Проверка мер

Передача, хранение, доступ, журнал, копии и стенды. Права проверяем прогоном из-под каждой роли, секреты ищем по истории репозитория.

Конец срока — Документ и план

Описание мер для юриста и службы безопасности, список расхождений и план исправления по этапам с вилкой бюджета.

Дальше — Доработка

Работаем в вашем репозитории, раз в две недели показываем результат на стенде. К каждой мере проверка приёмки.

После — Контроль

Пересмотр карты при новых полях и интеграциях, проверка ключей и журналов.

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

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

Мы этого не делаем

  • Не даём юридических консультаций: политику обработки, согласия, уведомления и статус оператора ведёт юрист заказчика.
  • Не готовим документы по приказам регуляторов, аттестацию не проводим, лицензии ФСТЭК у нас нет.
  • Не поставляем сертифицированные средства защиты и криптографии и не настраиваем системы утечек и защиты сети (DLP, SIEM, WAF).
  • Не атакуем боевые системы, не защищаем от DDoS и не дежурим круглосуточно.
  • Не храним данные карт: платежи принимает ваш эквайринг.
  • Не берём работы дешевле 150 000 ₽.
Размещение и ИИ

Серверы в России, GDPR и сервисы с ИИ: что решается технически

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

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

Отдельная тема — ИИ. Отправлять персональные данные во внешние облачные модели для данных ограниченного доступа чаще всего не подходит по требованиям заказчика. Если ассистент должен работать с карточками клиентов или обращениями, модель разворачивается на ваших серверах, как на странице частных языковых моделей. Проверку самого ИИ-решения на утечки описывает страница аудита ИИ.

Инструменты

На чём собираем

Приложение и данные
  • Python (Django, FastAPI) или Go
  • PostgreSQL с политиками на уровне строк и шифрованием полей средствами приложения
  • Хранилище секретов: Vault или средство вашей платформы
  • S3-совместимое хранилище в вашем контуре для файлов
Журнал, проверка и развёртывание
  • Журнал действий в отдельной таблице или хранилище с запретом правки
  • Маскирование полей в журналах ошибок и трассировках
  • Docker, Nginx, GitLab CI с проверкой секретов в истории
  • Обезличивание выгрузок для стендов скриптом в сборке
Материалы

Материалы по теме

Статья

Защита персональных данных в веб-приложении: технические меры

Какие меры внедрять в каком порядке и как заказчику проверить их самому.

  • Карта данных
  • Порядок мер
  • Список проверок
Читать →
Статья

Личный кабинет для партнёров: что в него включать

Какие данные кабинет показывает наружу и как проверить права.

  • Что обязательно
  • Откуда данные
  • Ролевая модель
Читать →
Статья

Мультиарендность в SaaS: как разделить данные клиентов

Три схемы изоляции данных и проверки на утечку между клиентами.

  • Три схемы
  • Политики на уровне строк
  • Тесты изоляции
Читать →
Заявка

Расскажите, какие данные собирает ваше приложение

Сорок минут созвона: какие данные о людях вы собираете, где они лежат и кто к ним имеет доступ. По итогам скажем, хватит ли обследования одного приложения и в какую вилку это укладывается.

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: защита персональных данных в веб-приложении

Сколько стоит защита персональных данных в веб-приложении?

Обследование одного приложения — 200 000 ₽ за 2–3 недели, нескольких систем — 350 000 ₽ за 3–4 недели; на выходе карта данных, описание мер и план исправления. Доработка приложения оценивается после обследования, этапами от 150 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.

Что нужно, чтобы приложение соответствовало 152-ФЗ?

Соответствие — вопрос юридический, и ответ на него даёт юрист заказчика: политика обработки, согласия, уведомления, статус оператора. Мы отвечаем за техническую часть: данные хранятся и передаются защищённо, доступ ограничен, действия записаны, срок хранения соблюдается, удаление работает. Заключений о соответствии мы не выдаём.

Мы подпадаем под GDPR?

Это определяет юрист: зависит от того, есть ли среди ваших пользователей жители Европейского союза и как вы с ними работаете. Технически требования похожи на российские: согласие с датой, выгрузка данных человека, удаление, журнал.

Достаточно ли шифрования диска?

Нет. Шифрование диска защищает от кражи самого носителя, но не от запроса в базу под действующей учётной записью. Для чувствительных полей добавляется шифрование на уровне приложения с ключом, который лежит отдельно от базы, а остальное защищается правами и журналом.

Какие данные нужно писать в журнал действий?

Кто, что, когда и по какому основанию: вход, просмотр карточки, изменение, выгрузка, действия поддержки. Содержимое карточек, пароли, токены и коды в журнал не попадают: журнал с такими данными сам становится утечкой. Записи не правятся, срок хранения задаёт регламент.

Где должны храниться данные?

Персональные данные граждан России обычно должны храниться на серверах в России. Приложение и база работают на ваших серверах или у выбранного вами хостера, исходный код и ключи у вас. Какие внешние сервисы допустимы, определяет юрист, а мы показываем, какие данные туда уходят.

Можно ли использовать ChatGPT с данными клиентов?

Для персональных данных и данных ограниченного доступа внешние облачные модели чаще всего не подходят по требованиям заказчика. Если ИИ-ассистент нужен, модель разворачивается на ваших серверах, а качество ответов проверяется на вашей выборке.

Как устроено сопровождение после доработки?

Ежемесячно: 20 000, 60 000 или 120 000 ₽ в месяц, до 4, 12 или 25 часов. Часы идут на проверку журналов, обновление зависимостей и ключей, разбор обращений. Сверх пакета — 5 000 ₽ в час, по согласованию до начала.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.