Обеспечение соответствия сайта требованиям GDPR

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Обеспечение соответствия сайта требованиям GDPR
Сложная
~5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Обеспечение соответствия сайта требованиям GDPR

GDPR (General Data Protection Regulation) — регламент ЕС о защите персональных данных, действующий с 2018 года. Распространяется на любой сайт, обрабатывающий данные граждан ЕС, независимо от того, где расположен сервер. Штрафы: до €20 млн или 4% от глобального оборота.

Шесть правовых оснований для обработки ПДн

  1. Согласие — явное, отзывное, конкретное
  2. Договор — необходимость для выполнения договора
  3. Юридическое обязательство — требования закона
  4. Жизненно важные интересы — защита жизни
  5. Публичная задача — государственные функции
  6. Законный интерес — коммерческие интересы (балансировочный тест)

Большинство коммерческих сайтов используют согласие и договор.

Технические меры (GDPR Art. 25 & 32)

Privacy by Design — проектирование с учётом приватности:

// Принцип минимизации данных — собирать только необходимое
class UserRegistrationRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'email'    => 'required|email',
            'password' => 'required|min:8',
            // НЕТ: phone, birthdate, address — если не нужны для сервиса
        ];
    }
}

// Псевдонимизация — замена ПДн идентификаторами
class AnalyticsEventService
{
    public function track(User $user, string $event): void
    {
        AnalyticsEvent::create([
            'user_pseudonym' => hash('sha256', $user->id . config('app.analytics_salt')),
            'event'          => $event,
            // НЕТ: user_id, email — не нужны для аналитики
        ]);
    }
}

Шифрование данных в покое:

// Чувствительные поля шифруются (см. страницу про шифрование ПДн)
protected $casts = [
    'date_of_birth' => EncryptedCast::class,
    'address'       => EncryptedCast::class,
];

Права субъектов данных (GDPR Art. 15-22)

Право Срок ответа Реализация
Доступ (Art. 15) 1 месяц Экспорт данных в ЛК
Исправление (Art. 16) 1 месяц Редактирование профиля
Удаление (Art. 17) 1 месяц Кнопка «Удалить аккаунт»
Ограничение (Art. 18) 1 месяц Заморозка обработки
Переносимость (Art. 20) 1 месяц Экспорт в JSON/CSV
Возражение (Art. 21) Без задержки Отписка от рассылок
// Реализация права на удаление (right to erasure)
class GdprUserDeletionService
{
    public function deleteUser(User $user): void
    {
        DB::transaction(function () use ($user) {
            // Анонимизировать, не удалять — для сохранения бухгалтерских данных
            $user->update([
                'name'  => 'Удалённый пользователь',
                'email' => 'deleted_' . $user->id . '@deleted.invalid',
                'phone' => null,
            ]);

            // Удалить персональные данные
            $user->consents()->delete();
            $user->addresses()->delete();

            // Сохранить транзакции (юридическое обязательство)
            // $user->orders — оставить с анонимизированным user_id

            $user->tokens()->delete(); // отозвать все сессии
            $user->update(['deleted_at' => now(), 'anonymized_at' => now()]);
        });

        // Уведомить все обработчики данных (email-провайдер и т.д.)
        event(new UserDataDeleted($user->id));
    }
}

Экспорт данных (право на переносимость)

class UserDataExportService
{
    public function generateExport(User $user): string
    {
        $data = [
            'export_date' => now()->toIso8601String(),
            'user' => [
                'id'         => $user->id,
                'name'       => $user->name,
                'email'      => $user->email,
                'created_at' => $user->created_at,
            ],
            'consents'     => $user->consents()->with('type')->get()->toArray(),
            'orders'       => $user->orders()->get()->toArray(),
            'activity'     => AuditLog::where('user_id', $user->id)
                                ->orderByDesc('created_at')->get()->toArray(),
        ];

        $path = "gdpr-exports/user_{$user->id}_" . now()->timestamp . ".json";
        Storage::disk('private')->put($path, json_encode($data, JSON_PRETTY_PRINT));

        // Ссылка действительна 24 часа
        return Storage::disk('private')->temporaryUrl($path, now()->addHours(24));
    }
}

Record of Processing Activities (ROPA)

GDPR требует документировать все операции обработки:

// config/gdpr-ropa.php
return [
    'controller' => [
        'name'    => 'ООО "Компания"',
        'address' => '...',
        'contact' => '[email protected]',
    ],
    'activities' => [
        [
            'name'          => 'User Registration',
            'purpose'       => 'Service provision',
            'legal_basis'   => 'Contract (Art. 6.1.b)',
            'data_subjects' => 'Customers',
            'data_types'    => ['name', 'email', 'hashed_password'],
            'retention'     => 'Account lifetime + 2 years',
            'recipients'    => ['Sendgrid (DPA signed)', 'Stripe (DPA signed)'],
            'transfers'     => ['US - Standard Contractual Clauses'],
        ],
    ],
];

Data Processing Agreements (DPA)

С каждым сервисом-обработчиком данных должно быть заключено DPA:

  • Sendgrid/Mailchimp — обязательно, доступно онлайн
  • Google Analytics — GA4 + DPA + IP-анонимизация
  • Stripe — встроено в Terms of Service
  • AWS/GCP/Azure — доступно в консоли

Уведомление об утечке (Art. 33-34)

class DataBreachService
{
    // Уведомить надзорный орган (SA) в течение 72 часов
    public function notifySupervisoryAuthority(DataBreach $breach): void
    {
        // Для РФ — Роскомнадзор; для ЕС — локальный DPA
        // Уведомление через официальный портал или API

        BreachNotification::create([
            'breach_id'         => $breach->id,
            'notified_authority'=> $this->getCompetentAuthority($breach),
            'notified_at'       => now(),
            'notification_ref'  => $this->submitToAuthority($breach),
        ]);
    }

    // Уведомить субъектов при высоком риске (Art. 34)
    public function notifyDataSubjects(DataBreach $breach): void
    {
        if ($breach->risk_level === 'high') {
            $breach->affectedUsers()->each(function (User $user) use ($breach) {
                Mail::to($user)->queue(new DataBreachNotificationMail($breach));
            });
        }
    }
}

Cookie Consent

Cookie banner с детальным управлением по категориям — обязательный элемент. Согласие на аналитические и маркетинговые cookies должно быть получено до их установки (см. отдельную страницу по Cookie Consent Banner).

DPO (Data Protection Officer)

При обработке большого объёма ПДн специальных категорий или систематическом мониторинге назначение DPO обязательно. Для большинства малого и среднего бизнеса — рекомендовано, не обязательно.

Срок реализации

  • Gap-анализ текущего состояния: 2–3 дня
  • Технические меры (шифрование, права субъектов, cookie banner): 7–14 дней
  • Документация (ROPA, DPA, политики): 3–5 дней
  • Тестирование процессов удаления/экспорта: 2–3 дня
  • Итого: 3–5 недель для типового SaaS