Забезпечення відповідності сайту вимогам GDPR
GDPR (General Data Protection Regulation) - це регламент ЄС про захист персональних даних, дійсний з 2018 року. Поширюється на будь-який сайт, що обробляє дані громадян ЄС, незалежно від розташування сервера. Штрафи: до €20 млн або 4% від глобального обороту.
Шість правових оснань для обробки ПДн
- Согласие — явне, відзивне, конкретне
- Договір — необхідність для виконання договору
- Юридичне зобов'язання — вимоги закону
- Життєво важливі інтереси — захист життя
- Публічна задача — державні функції
- Законний інтерес — комерційні інтереси (балансовий тест)
Більшість комерційних сайтів використовують согласие та договір.
Технічні заходи (GDPR Art. 25 & 32)
Privacy by Design:
class UserRegistrationRequest extends FormRequest
{
public function rules(): array
{
return [
'email' => 'required|email',
'password' => 'required|min:8',
];
}
}
class AnalyticsEventService
{
public function track(User $user, string $event): void
{
AnalyticsEvent::create([
'user_pseudonym' => hash('sha256', $user->id . config('app.analytics_salt')),
'event' => $event,
]);
}
}
Права суб'єктів даних (GDPR Art. 15-22)
| Право | Час відповіді | Реалізація |
|---|---|---|
| Доступ (Art. 15) | 1 місяць | Експорт даних в ЛК |
| Виправлення (Art. 16) | 1 місяць | Редагування профілю |
| Видалення (Art. 17) | 1 місяць | Кнопка видалення облік.запису |
| Обмеження (Art. 18) | 1 місяць | Заморозка обробки |
| Переносимість (Art. 20) | 1 місяць | Експорт в JSON/CSV |
| Заперечення (Art. 21) | Без затримки | Відписка від розсилок |
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->tokens()->delete();
$user->update(['deleted_at' => now(), 'anonymized_at' => now()]);
});
event(new UserDataDeleted($user->id));
}
}
Data Processing Agreements (DPA)
Кожен сервіс-обробник даних повинен мати DPA:
- Sendgirl/Mailchimp — доступно онлайн
- Google Analytics — GA4 + DPA + IP-анонімізація
- Stripe — вбудовано в Terms of Service
- AWS/GCP/Azure — доступно в консолі
Уведомлення про утечку (Art. 33-34)
class DataBreachService
{
public function notifySupervisoryAuthority(DataBreach $breach): void
{
BreachNotification::create([
'breach_id' => $breach->id,
'notified_authority' => $this->getCompetentAuthority($breach),
'notified_at' => now(),
'notification_ref' => $this->submitToAuthority($breach),
]);
}
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));
});
}
}
}
Тривалість реалізації
- Gap-аналіз поточного стану: 2–3 дні
- Технічні заходи (шифрування, права, cookie banner): 7–14 днів
- Документація (ROPA, DPA, політики): 3–5 днів
- Тестування процесів видалення/експорту: 2–3 дні
- Всього: 3–5 тижнів для типового SaaS







