Соответствие 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-согласия делит cookie на необходимые (сессия, CSRF — работают всегда) и аналитические (Метрика).
- Выбор пользователя сохраняется в отдельной cookie
cookie_consent(apps/core/views.py). - Скрипт Метрики инжектится в шаблон только при согласии. В
base.htmlблок Метрики выводится при условииrequest.COOKIES.cookie_consent == 'accepted'(и непустом ID счётчика). Если согласия нет —tag.jsне загружается вовсе.
Решение принимается на сервере в шаблоне по значению cookie — это надёжнее, чем полагаться на клиентский код.
Чек-лист для заказчика (вне кода)
Эти пункты — зона ответственности компании, не разработки, но о них стоит напомнить:
- подать в Роскомнадзор уведомление оператора персональных данных;
- финальные тексты согласия и политики должен проверить юрист;
- если данные передаются третьим лицам (например, в amoCRM) — это должно быть указано в согласии (цели обработки и перечень данных).