Перейти к содержанию

Соответствие 152-ФЗ

152-ФЗ — российский закон о персональных данных. Сайт собирает имя, телефон и (опционально) email, поэтому обязан ему соответствовать. Этот раздел объясняет, как требования закона реализованы в коде — чтобы при доработках случайно их не нарушить.

Это не юридическая консультация

Здесь описана только механика в коде. Финальные тексты согласия и политики конфиденциальности готовит и проверяет юрист компании — мы закладываем механизм, а не сочиняем юридические формулировки.

Согласие — отдельный документ

Согласие на обработку персональных данных и политику конфиденциальности нельзя объединять — это два разных документа по требованию закона. На сайте им соответствуют две отдельные страницы:

  • /soglasie-na-obrabotku-pdn/ — согласие на обработку ПДн;
  • /politika-konfidencialnosti/ — политика конфиденциальности.

При изменении не сливайте их в одну страницу.

Чекбокс согласия

Три правила, все проверяются на бэкенде:

  • Чекбокс не предзаполнен. Пользователь ставит галочку сам.
  • Без галочки форма не отправляетсяconsent объявлен как обязательное поле формы (required=True в apps/leads/forms.py). Валидация на сервере, а не только на фронте: даже если обойти JS, заявка без согласия не пройдёт.
  • Факт согласия фиксируется. В заявке (Lead) сохраняется consent=True вместе с created_at — остаётся отметка, что согласие было дано и когда.

Минимизация данных

Собираем только необходимое: имя и телефон обязательны, email — нет. Лишних полей в форме нет — это тоже требование закона (минимизация). При доработке формы не добавляйте поля «про запас».

Локализация: данные остаются в России

Закон требует, чтобы персональные данные граждан РФ хранились на территории России. Отсюда:

  • VPS — в российском дата-центре, база данных там же.
  • Никаких зарубежных аналитических сервисов. Google Analytics запрещён — используется только Яндекс.Метрика (российский сервис).
  • Персональные данные не уходят за рубеж даже в служебных целях. Например, перед отправкой ошибок в Sentry имена, телефоны и email вырезаются (config/sentry.py, before_send) — наружу уходит только трассировка без ПДн.

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

Метрика — аналитический cookie, поэтому подключается только после явного согласия пользователя:

  • Баннер cookie-согласия делит cookie на необходимые (сессия, CSRF — работают всегда) и аналитические (Метрика).
  • Выбор пользователя сохраняется в отдельной cookie cookie_consent (apps/core/views.py).
  • Скрипт Метрики инжектится в шаблон только при согласии. В base.html блок Метрики выводится при условии request.COOKIES.cookie_consent == 'accepted' (и непустом ID счётчика). Если согласия нет — tag.js не загружается вовсе.

Решение принимается на сервере в шаблоне по значению cookie — это надёжнее, чем полагаться на клиентский код.

Чек-лист для заказчика (вне кода)

Эти пункты — зона ответственности компании, не разработки, но о них стоит напомнить:

  • подать в Роскомнадзор уведомление оператора персональных данных;
  • финальные тексты согласия и политики должен проверить юрист;
  • если данные передаются третьим лицам (например, в amoCRM) — это должно быть указано в согласии (цели обработки и перечень данных).