GDPR για Developers | Τι Πραγματικά Χρειάζεται να Υλοποιήσετε
Ένας οδηγός GDPR εστιασμένος στους developers. Καλύπτει τις τεχνικές απαιτήσεις, τα μοτίβα χειρισμού δεδομένων και τις αποφάσεις σε επίπεδο κώδικα που πρέπει να πάρετε.
Ο GDPR ισχύει από το 2018, αλλά οι περισσότεροι οδηγοί για developers εξακολουθούν να εστιάζουν στη νομική θεωρία. Αυτός ο οδηγός είναι διαφορετικός. Καλύπτει τις τεχνικές απαιτήσεις, τον κώδικα που πρέπει να γράψετε και τις αρχιτεκτονικές αποφάσεις που κάνουν τη συμμόρφωση πρακτική αντί επώδυνη.
Αν το λογισμικό σας αποθηκεύει, επεξεργάζεται ή αγγίζει προσωπικά δεδομένα ανθρώπων στην ΕΕ, αυτό σας αφορά. Δεν έχει σημασία πού εδρεύει η εταιρεία σας.
Επισκόπηση GDPR για Developers
Παραλείψτε τα 99 άρθρα. Ορίστε τι σημαίνει ο GDPR για τον κώδικά σας:
- Συλλέξτε μόνο ό,τι χρειάζεστε. Μην αποθηκεύετε δεδομένα “για κάθε ενδεχόμενο.”
- Πείτε στους χρήστες τι κάνετε με τα δεδομένα τους. Και λάβετε την άδειά τους όταν απαιτείται.
- Αφήστε τους χρήστες να έχουν πρόσβαση, να εξάγουν και να διαγράφουν τα δεδομένα τους. Χρειάζεστε API endpoints γι’ αυτό.
- Κρατήστε τα δεδομένα ασφαλή. Κρυπτογράφηση, έλεγχοι πρόσβασης, αρχεία καταγραφής ελέγχου.
- Αναφέρετε παραβιάσεις γρήγορα. Έχετε 72 ώρες να ειδοποιήσετε τις αρχές μετά την ανακάλυψη παραβίασης.
- Τεκμηριώστε τα πάντα. Τις δραστηριότητες επεξεργασίας σας, τα μέτρα ασφαλείας σας, τις ροές δεδομένων σας.
Αυτή είναι η πρακτική περίληψη. Το υπόλοιπο αυτού του οδηγού δείχνει πώς να υλοποιήσετε κάθε απαίτηση.
Οι 7 Βασικές Τεχνικές Απαιτήσεις
1. Διαχείριση Συναίνεσης
Η συναίνεση πρέπει να δίνεται ελεύθερα, να είναι συγκεκριμένη, ενημερωμένη και αδιαμφισβήτητη. Τα προεπιλεγμένα checkboxes δεν μετρούν. Η δεσμευμένη συναίνεση (“συμφωνήστε σε όλα”) δεν μετρά. Η ανάκληση πρέπει να είναι εξίσου εύκολη με τη χορήγηση συναίνεσης.
Τι να Φτιάξετε
Ένα σύστημα συναίνεσης χρειάζεται τρία στοιχεία:
- Αποθήκη εγγραφών συναίνεσης. Για κάθε χρήστη, καταγράψτε σε τι συναίνεσε, πότε και πώς.
- Μηχανισμός ελέγχου συναίνεσης. Πριν από την επεξεργασία δεδομένων για συγκεκριμένο σκοπό, επαληθεύστε ότι ο χρήστης έχει ενεργή συναίνεση.
- Μηχανισμός ανάκλησης. Αφήστε τους χρήστες να ανακαλέσουν τη συναίνεση μέσω του UI σας και σταματήστε αμέσως την επεξεργασία.
Database Schema
CREATE TABLE user_consents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
consent_type VARCHAR(100) NOT NULL,
granted BOOLEAN NOT NULL,
granted_at TIMESTAMPTZ,
revoked_at TIMESTAMPTZ,
ip_address INET,
user_agent TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_user_consents_lookup
ON user_consents (user_id, consent_type, granted);
Αποθηκεύστε το πλήρες ιστορικό. Ποτέ μη διαγράφετε ή αντικαθιστάτε εγγραφές συναίνεσης. Όταν ένας χρήστης ανακαλεί τη συναίνεση, εισάγετε νέα γραμμή με granted = false και ορίστε revoked_at. Αυτό σας δίνει ίχνος ελέγχου.
Consent Checking Middleware
Ορίστε ένα Express middleware που ελέγχει τη συναίνεση πριν από την επεξεργασία ενός αιτήματος:
import { Request, Response, NextFunction } from "express";
import { db } from "./database";
interface ConsentRequirement {
type: string;
required: boolean;
}
function requireConsent(consentType: string) {
return async (req: Request, res: Response, next: NextFunction) => {
const userId = req.user?.id;
if (!userId) {
return res.status(401).json({ error: "Authentication required" });
}
const consent = await db.query(
`SELECT granted FROM user_consents
WHERE user_id = $1 AND consent_type = $2
ORDER BY created_at DESC
LIMIT 1`,
[userId, consentType]
);
if (!consent.rows[0]?.granted) {
return res.status(403).json({
error: "Consent required",
consentType,
message: `You must grant "${consentType}" consent to use this feature.`,
consentUrl: `/settings/privacy`,
});
}
next();
};
}
// Usage
app.post(
"/api/newsletter/subscribe",
requireConsent("marketing_emails"),
subscribeHandler
);
app.post(
"/api/analytics/track",
requireConsent("usage_analytics"),
trackHandler
);
2. Πρόσβαση και Εξαγωγή Δεδομένων (Δικαίωμα Πρόσβασης)
Οι χρήστες έχουν δικαίωμα να ζητήσουν αντίγραφο όλων των προσωπικών δεδομένων που κρατάτε γι’ αυτούς. Πρέπει να τα παρέχετε σε ευρέως χρησιμοποιούμενη, μηχανικά αναγνώσιμη μορφή. JSON ή CSV λειτουργεί μια χαρά.
Τι να Φτιάξετε
Ένα endpoint που συλλέγει όλα τα προσωπικά δεδομένα ενός χρήστη από κάθε πίνακα και υπηρεσία, και τα πακετάρει σε αρχείο λήψης.
interface DataExport {
exportedAt: string;
user: {
profile: Record<string, unknown>;
activity: Record<string, unknown>[];
consents: Record<string, unknown>[];
communications: Record<string, unknown>[];
};
}
app.get("/api/me/data-export", authenticate, async (req, res) => {
const userId = req.user.id;
const [profile, activity, consents, communications] = await Promise.all([
db.query("SELECT id, email, name, created_at FROM users WHERE id = $1", [
userId,
]),
db.query(
"SELECT action, metadata, created_at FROM user_activity WHERE user_id = $1 ORDER BY created_at DESC",
[userId]
),
db.query(
"SELECT consent_type, granted, granted_at, revoked_at FROM user_consents WHERE user_id = $1 ORDER BY created_at DESC",
[userId]
),
db.query(
"SELECT type, sent_at, subject FROM communications WHERE user_id = $1 ORDER BY sent_at DESC",
[userId]
),
]);
const exportData: DataExport = {
exportedAt: new Date().toISOString(),
user: {
profile: profile.rows[0],
activity: activity.rows,
consents: consents.rows,
communications: communications.rows,
},
};
res.setHeader("Content-Type", "application/json");
res.setHeader(
"Content-Disposition",
`attachment; filename="data-export-${userId}.json"`
);
res.json(exportData);
});
Αυτό το endpoint πρέπει να καλύπτει κάθε πίνακα που περιέχει δεδομένα χρήστη. Ελέγξτε το schema σας διεξοδικά. Ένας πίνακας που λείπει σημαίνει ελλιπή εξαγωγή, που αποτελεί αποτυχία συμμόρφωσης.
3. Δικαίωμα Διαγραφής (Δικαίωμα στη Λήθη)
Οι χρήστες μπορούν να ζητήσουν τη διαγραφή όλων των προσωπικών τους δεδομένων. Πρέπει να συμμορφωθείτε εκτός αν έχετε νομική υποχρέωση διατήρησής τους (όπως φορολογικά αρχεία ή πρόληψη απάτης).
Τι να Φτιάξετε
Ένα endpoint διαγραφής που αφαιρεί ή ανωνυμοποιεί δεδομένα χρήστη σε όλους τους πίνακες. Αυτό είναι πιο δύσκολο απ’ ό,τι ακούγεται λόγω foreign key constraints και δεδομένων από τα οποία εξαρτώνται άλλα συστήματα.
app.delete("/api/me/account", authenticate, async (req, res) => {
const userId = req.user.id;
const client = await db.getClient();
try {
await client.query("BEGIN");
// Ανωνυμοποίηση δεδομένων που πρέπει να διατηρηθούν για επιχειρηματικά αρχεία
await client.query(
`UPDATE orders
SET customer_name = 'deleted', customer_email = 'deleted'
WHERE user_id = $1`,
[userId]
);
// Διαγραφή δεδομένων που μπορούν να αφαιρεθούν πλήρως
await client.query("DELETE FROM user_activity WHERE user_id = $1", [
userId,
]);
await client.query("DELETE FROM user_consents WHERE user_id = $1", [
userId,
]);
await client.query("DELETE FROM communications WHERE user_id = $1", [
userId,
]);
await client.query("DELETE FROM sessions WHERE user_id = $1", [userId]);
// Ανωνυμοποίηση εγγραφής χρήστη αντί διαγραφής
// Αυτό διατηρεί την αναφορική ακεραιότητα
await client.query(
`UPDATE users SET
email = 'deleted-' || id || '@removed.invalid',
name = 'Deleted User',
phone = NULL,
address = NULL,
deleted_at = NOW()
WHERE id = $1`,
[userId]
);
await client.query("COMMIT");
// Ενεργοποίηση διαγραφής σε εξωτερικά συστήματα
await Promise.allSettled([
emailService.deleteSubscriber(userId),
analyticsService.deleteUser(userId),
searchIndex.removeUser(userId),
]);
res.json({ message: "Account and personal data deleted" });
} catch (error) {
await client.query("ROLLBACK");
throw error;
} finally {
client.release();
}
});
Βασικές αποφάσεις:
- Διαγραφή vs ανωνυμοποίηση. Εγγραφές που χρειάζονται για λογιστική (παραγγελίες, τιμολόγια) πρέπει να ανωνυμοποιηθούν. Διαγράψτε τα πάντα τα υπόλοιπα.
- Εξωτερικά συστήματα. Δεδομένα που στάλθηκαν σε υπηρεσίες τρίτων πρέπει να διαγραφούν και εκεί.
- Χρονισμός. Ο GDPR λέει “χωρίς αδικαιολόγητη καθυστέρηση.” Ολοκληρώστε τη διαγραφή εντός 30 ημερών. Για τα περισσότερα συστήματα, κάντε τη άμεση.
4. Ελαχιστοποίηση Δεδομένων
Συλλέξτε και αποθηκεύστε μόνο τα δεδομένα που πραγματικά χρειάζεστε για δηλωμένο σκοπό. Αν ζητάτε αριθμό τηλεφώνου αλλά δεν καλείτε ποτέ τους χρήστες, δεν πρέπει να τον συλλέγετε.
Πρακτικοί Κανόνες
- Ελέγξτε κάθε πεδίο φόρμας. Για κάθε πεδίο, ρωτήστε: “Ποια συγκεκριμένη λειτουργία χαλάει αν αφαιρέσουμε αυτό;” Αν η απάντηση είναι τίποτα, αφαιρέστε το.
- Ορίστε περιόδους διατήρησης. Μην κρατάτε δεδομένα για πάντα. Ορίστε πόσο χρόνο χρειάζεται κάθε τύπος δεδομένων, και μετά αυτο-διαγράψτε τα.
- Ελαχιστοποιήστε τα logs. Αφαιρέστε προσωπικά δεδομένα από εγγραφές log. Καταγράφετε user IDs, όχι ονόματα ή emails.
-- Αυτόματη διατήρηση δεδομένων με PostgreSQL
-- Εκτελέστε αυτό ως προγραμματισμένη εργασία (π.χ., pg_cron)
DELETE FROM user_activity
WHERE created_at < NOW() - INTERVAL '2 years';
DELETE FROM session_logs
WHERE created_at < NOW() - INTERVAL '90 days';
DELETE FROM password_reset_tokens
WHERE created_at < NOW() - INTERVAL '24 hours';
5. Κρυπτογράφηση
Ο GDPR απαιτεί “κατάλληλα τεχνικά μέτρα” για την προστασία προσωπικών δεδομένων. Η κρυπτογράφηση είναι το πιο σημαντικό.
Σε Ηρεμία (At Rest)
- Κρυπτογραφήστε τον δίσκο της βάσης δεδομένων. Όλοι οι μεγάλοι cloud πάροχοι το υποστηρίζουν. Ενεργοποιήστε το και επαληθεύστε.
- Για εξαιρετικά ευαίσθητα πεδία (ΑΜΚΑ, ιατρικά δεδομένα), προσθέστε κρυπτογράφηση σε επίπεδο εφαρμογής επιπλέον.
- Κρυπτογραφήστε τα backups. Ένα μη κρυπτογραφημένο backup είναι μια παραβίαση που περιμένει να συμβεί.
Σε Μεταφορά (In Transit)
- TLS παντού. Κάθε σύνδεση μεταξύ υπηρεσιών, βάσεων δεδομένων και χρηστών. Χωρίς εξαιρέσεις.
- Επιβάλλετε HTTPS. Ανακατευθύνετε HTTP. Ορίστε HSTS headers.
- Χρησιμοποιήστε TLS για συνδέσεις βάσης δεδομένων. Η PostgreSQL το υποστηρίζει εγγενώς.
// PostgreSQL connection with TLS
import { Pool } from "pg";
const pool = new Pool({
host: process.env.DB_HOST,
port: 5432,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
ssl: {
rejectUnauthorized: true,
ca: fs.readFileSync("/path/to/server-ca.pem").toString(),
},
});
6. Ειδοποίηση Παραβίασης
Αν τα προσωπικά δεδομένα παραβιαστούν, πρέπει να ειδοποιήσετε την αρμόδια Αρχή Προστασίας Δεδομένων εντός 72 ωρών. Αν η παραβίαση ενέχει υψηλό κίνδυνο για τα άτομα, πρέπει επίσης να ειδοποιήσετε τους πληγέντες χρήστες.
Τι να Φτιάξετε
- Αρχεία ελέγχου. Καταγράψτε κάθε πρόσβαση σε προσωπικά δεδομένα. Ποιος πρόσβηκε, πότε και από πού.
- Ανίχνευση ανωμαλιών. Ειδοποίηση για ασυνήθιστα μοτίβα πρόσβασης (μαζικές εξαγωγές δεδομένων, πρόσβαση από νέες IPs, πρόσβαση εκτός ωραρίου).
- Σχέδιο αντιμετώπισης συμβάντων. Τεκμηριώστε ποιος κάνει τι όταν ανιχνεύεται παραβίαση. Αυτό δεν είναι κώδικας. Είναι λίστα ελέγχου που εξασκεί η ομάδα σας.
CREATE TABLE data_access_log (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
accessed_by UUID NOT NULL,
access_type VARCHAR(50) NOT NULL,
resource_type VARCHAR(100) NOT NULL,
resource_id UUID,
ip_address INET,
user_agent TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_data_access_log_user
ON data_access_log (user_id, created_at);
CREATE INDEX idx_data_access_log_accessor
ON data_access_log (accessed_by, created_at);
7. Ιδιωτικότητα από τον Σχεδιασμό
Ο GDPR λέει ότι η ιδιωτικότητα πρέπει να ενσωματώνεται στα συστήματα από την αρχή, όχι να προστίθεται μετά. Στην πράξη, αυτό σημαίνει να κάνετε την ιδιωτικότητα την προεπιλογή.
- Προεπιλογή σε ιδιωτικό. Νέες λειτουργίες πρέπει να συλλέγουν ελάχιστα δεδομένα και να απαιτούν opt-in για οτιδήποτε πέρα από τη βασική λειτουργία.
- Οι ρυθμίσεις προεπιλέγονται στην πιο ιδιωτική επιλογή. Χρήστες που δεν αγγίζουν ποτέ τις ρυθμίσεις τους πρέπει να έχουν τη μέγιστη προστασία ιδιωτικότητας.
- Διαχωρίστε τις ανησυχίες. Μην αναμιγνύετε δεδομένα analytics με λειτουργικά δεδομένα. Μην επαναχρησιμοποιείτε auth tokens για tracking.
Ανωνυμοποίηση vs Ψευδωνυμοποίηση
Αυτά δεν είναι το ίδιο πράγμα, και η διάκριση μετρά.
- Ψευδωνυμοποίηση αντικαθιστά ταυτοποιητικές πληροφορίες με αντιστρέψιμο token. Παράδειγμα: hashing email. Αν έχετε τη hash function και το αρχικό email, μπορείτε να αναγνωρίσετε ξανά το άτομο. Ο GDPR ισχύει ακόμα γιατί η αναγνώριση είναι δυνατή.
- Ανωνυμοποίηση αφαιρεί ταυτοποιητικές πληροφορίες μόνιμα. Παράδειγμα: συγκεντρωτικά analytics (“1.247 χρήστες επισκέφτηκαν τη σελίδα τιμολόγησης”) χωρίς τρόπο αναγνώρισης ποιοι χρήστες. Ο GDPR δεν ισχύει σε πραγματικά ανωνυμοποιημένα δεδομένα.
Η πραγματική ανωνυμοποίηση είναι δύσκολη. Αν το “ανώνυμο” dataset σας περιλαμβάνει timestamp, πόλη και τύπο συσκευής, αυτός ο συνδυασμός μπορεί να αναγνωρίσει μοναδικά κάποιον. Να είστε συντηρητικοί.
Cookie Consent
Αν η ιστοσελίδα σας χρησιμοποιεί cookies πέρα από τα απολύτως απαραίτητα, χρειάζεστε συναίνεση πριν τα ορίσετε.
Απαιτεί συναίνεση: analytics cookies, advertising pixels, social media widgets, οποιοδήποτε tracking script τρίτου.
Δεν απαιτεί συναίνεση: session cookies, shopping cart cookies, CSRF tokens, το ίδιο το cookie προτίμησης συναίνεσης.
Το banner συναίνεσης πρέπει να μπλοκάρει μη απαραίτητα cookies μέχρι να δοθεί συναίνεση, να προσφέρει λεπτομερείς επιλογές και να κάνει το “απόρριψη όλων” εξίσου εύκολο με το “αποδοχή όλων.” Μην το φτιάξετε από το μηδέν. Εργαλεία όπως το Cookiebot χειρίζονται την πολυπλοκότητα. Ο βασικός κανόνας: κανένα tracking script δεν εκτελείται πριν δοθεί συναίνεση.
Τρίτοι Επεξεργαστές Δεδομένων
Κάθε υπηρεσία τρίτου που χειρίζεται δεδομένα χρηστών σας είναι “επεξεργαστής δεδομένων” υπό τον GDPR. Εσείς είστε υπεύθυνοι για τη συμμόρφωσή τους.
Τι να Ελέγξετε
Πριν ενσωματώσετε οποιαδήποτε υπηρεσία τρίτου που αγγίζει προσωπικά δεδομένα:
- Έχουν DPA; Μια Συμφωνία Επεξεργασίας Δεδομένων είναι υποχρεωτική. Οι περισσότεροι SaaS πάροχοι δημοσιεύουν τη δική τους δημόσια.
- Πού αποθηκεύουν δεδομένα; Αν εκτός ΕΕ, επαληθεύστε τη νομική βάση για τη μεταφορά.
- Σε ποια δεδομένα έχουν πρόσβαση; Ελαχιστοποιήστε αυτά που στέλνετε. Αν η υπηρεσία χρειάζεται μόνο email, μη στέλνετε ολόκληρο το προφίλ.
- Μπορείτε να διαγράψετε δεδομένα από τα συστήματά τους; Τα αιτήματα διαγραφής χρηστών πρέπει να διαδίδονται παντού.
- Πώς χειρίζονται παραβιάσεις; Η DPA τους πρέπει να ορίζει χρονοδιαγράμματα ειδοποίησης.
Κοινοί Τρίτοι Επεξεργαστές για Έλεγχο
- Υπηρεσίες email (Resend, SendGrid, Mailchimp)
- Analytics (Google Analytics, Mixpanel, Amplitude)
- Παρακολούθηση σφαλμάτων (Sentry, Bugsnag)
- Επεξεργασία πληρωμών (Stripe, Adyen)
- Cloud hosting (AWS, Google Cloud, Vercel)
- Εργαλεία εξυπηρέτησης πελατών (Intercom, Zendesk)
- AI APIs (OpenAI, Anthropic, Google AI)
Διατηρήστε λίστα όλων των επεξεργαστών. Ελέγχετέ την τριμηνιαία.
Πολιτικές Διατήρησης Δεδομένων
Μην κρατάτε προσωπικά δεδομένα περισσότερο από το απαραίτητο. Ορίστε περιόδους διατήρησης για κάθε τύπο δεδομένων.
| Τύπος Δεδομένων | Προτεινόμενη Διατήρηση | Λόγος |
|---|---|---|
| Δεδομένα λογαριασμού χρήστη | Μέχρι να ζητηθεί διαγραφή | Απαραίτητα για την υπηρεσία |
| Logs sessions | 90 ημέρες | Ασφάλεια και αποσφαλμάτωση |
| Logs δραστηριότητας χρήστη | 1-2 χρόνια | Analytics προϊόντος |
| Αιτήματα υποστήριξης | 3 χρόνια | Ποιότητα υπηρεσίας |
| Οικονομικά αρχεία | 7 χρόνια | Φορολογικές/νομικές υποχρεώσεις |
| Tokens επαναφοράς κωδικού | 24 ώρες | Ασφάλεια |
| Αποτυχημένες προσπάθειες σύνδεσης | 90 ημέρες | Παρακολούθηση ασφάλειας |
Υλοποιήστε αυτοματοποιημένες εργασίες καθαρισμού. Μην βασίζεστε σε κάποιον να θυμάται να εκτελέσει script.
Λίστα Ελέγχου GDPR για Developers
Χρησιμοποιήστε αυτή ως σημείο εκκίνησης κατά την κατασκευή ή τον έλεγχο ενός συστήματος.
Συλλογή Δεδομένων
- Κάθε πεδίο φόρμας έχει δηλωμένο σκοπό
- Δεν συλλέγονται περιττά δεδομένα
- Η πολιτική απορρήτου συνδέεται από κάθε σημείο συλλογής δεδομένων
- Η συναίνεση συλλέγεται πριν από την επεξεργασία (όπου απαιτείται)
- Οι εγγραφές συναίνεσης αποθηκεύονται με timestamps
Αποθήκευση Δεδομένων
- Η κρυπτογράφηση βάσης δεδομένων σε ηρεμία είναι ενεργοποιημένη
- Το TLS επιβάλλεται σε όλες τις συνδέσεις
- Ευαίσθητα πεδία έχουν κρυπτογράφηση σε επίπεδο εφαρμογής
- Τα backups είναι κρυπτογραφημένα
- Η πρόσβαση σε δεδομένα παραγωγής είναι περιορισμένη και καταγεγραμμένη
Δικαιώματα Χρηστών
- Υπάρχει endpoint εξαγωγής δεδομένων που καλύπτει όλους τους πίνακες
- Υπάρχει endpoint διαγραφής λογαριασμού που χειρίζεται όλα τα δεδομένα
- Οι χρήστες μπορούν να δουν και να ανακαλέσουν συναίνεση στις ρυθμίσεις τους
- Η διαγραφή διαδίδεται σε υπηρεσίες τρίτων
- Όλα τα αιτήματα δικαιωμάτων χρηστών απαντώνται εντός 30 ημερών
Cookies και Tracking
- Το banner συναίνεσης cookies υλοποιείται
- Μη απαραίτητα cookies μπλοκάρονται πριν τη συναίνεση
- Οι επιλογές συναίνεσης είναι λεπτομερείς (όχι όλα-ή-τίποτα)
- Το “Απόρριψη όλων” είναι εξίσου εμφανές με το “Αποδοχή όλων”
Τρίτοι
- Όλοι οι επεξεργαστές δεδομένων τεκμηριώνονται
- DPAs υπογράφονται με κάθε επεξεργαστή
- Τα δεδομένα που στέλνονται σε τρίτους ελαχιστοποιούνται
- Η διαγραφή δεδομένων από τρίτους είναι δυνατή
Ασφάλεια
- Τα αρχεία ελέγχου καταγράφουν πρόσβαση σε προσωπικά δεδομένα
- Η ειδοποίηση ανωμαλιών είναι ρυθμισμένη
- Το σχέδιο αντιμετώπισης συμβάντων τεκμηριώνεται
- Η διαδικασία ειδοποίησης παραβίασης ορίζεται (προθεσμία 72 ωρών)
Διατήρηση
- Οι περίοδοι διατήρησης ορίζονται για όλους τους τύπους δεδομένων
- Αυτοματοποιημένες εργασίες καθαρισμού προγραμματίζονται
- Τα ληγμένα δεδομένα πραγματικά διαγράφονται (επαληθεύστε αυτό)
Τελικές Σκέψεις
Η συμμόρφωση GDPR δεν είναι εφάπαξ project. Είναι ένα σύνολο πρακτικών ενσωματωμένων στον τρόπο που φτιάχνετε λογισμικό. Η τεχνική εργασία είναι απλή: αποθήκευση συναίνεσης, εξαγωγή δεδομένων, endpoints διαγραφής, κρυπτογράφηση, audit logging. Τυπικό engineering.
Το δύσκολο μέρος είναι η σχολαστικότητα. Είναι εύκολο να ξεχάσετε εκείνο το αρχείο log, εκείνο το analytics event ή εκείνη την ενσωμάτωση τρίτου που αποθηκεύει emails χρηστών. Ελέγχετε τακτικά. Δοκιμάστε το endpoint διαγραφής. Επαληθεύστε ότι οι εξαγωγές σας είναι πλήρεις. Ενσωματώστε την ιδιωτικότητα στη διαδικασία σας από την αρχή.
Χρειάζεστε βοήθεια για κατασκευή GDPR-compliant λογισμικού ή έλεγχο υπαρχόντων συστημάτων; Επικοινωνήστε μαζί μας. Κατασκευάζουμε εφαρμογές με προτεραιότητα στην ιδιωτικότητα για ευρωπαϊκές επιχειρήσεις και εταιρείες που εξυπηρετούν χρήστες στην ΕΕ.