Skip to content

Security and Privacy

github-actions[bot] edited this page Oct 5, 2026 · 7 revisions

Ελληνικά · English

Ασφάλεια και προσωπικά δεδομένα

Η Karta διαχειρίζεται νόμιμα αρχεία χρόνου εργασίας και προσωπικά δεδομένα του προσωπικού (ονόματα, ΑΦΜ, ώρες εργασίας). Δείτε πώς προστατεύονται, και τι είναι δική σας ευθύνη.

Ποιος μπορεί να κάνει τι

Τμήμα Προστατεύεται με
Σελίδα διαχείρισης (/admin, /admin/api/…) Cloudflare Access. Σε κάθε αίτημα η Karta ελέγχει το υπογεγραμμένο token (υπογραφή RS256, audience, issuer, λήξη) και ότι το email υπάρχει στο ADMIN_EMAILS. Αν κάτι λείπει ή είναι λάθος, η πρόσβαση απορρίπτεται.
Χτυπήματα στην οθόνη του καταστήματος Χτυπούν κάρτα μόνο γραμμένες συσκευές. Η εγγραφή χρειάζεται κωδικό μίας χρήσης από τον διαχειριστή (ισχύει 10 λεπτά), και μετά η συσκευή κρατά ένα cookie HttpOnly, Secure, SameSite=Strict. Μπορείτε να ανακαλέσετε οποιαδήποτε συσκευή.
Κάθε χτύπημα Το PIN του εργαζόμενου (6 ψηφία, τα πολύ εύκολα δεν γίνονται δεκτά, κλείδωμα 5 λεπτών μετά από 5 λάθη) ή η κάρτα QR του.
Σύνδεσμοι κάρτας για το κινητό Τυχαίο token, ισχύει 24 ώρες και ανοίγει το πολύ 10 φορές· ακυρώνεται μόλις εκδοθεί νέα κάρτα.

Τα αιτήματα που αλλάζουν δεδομένα πρέπει να έρχονται από το δικό σας PUBLIC_ORIGIN. Αιτήματα από άλλα sites απορρίπτονται.

Πώς αποθηκεύονται τα μυστικά

  • PIN: κρυπτογραφική σύνοψη (hash) με Argon2, οπότε δεν μπορούν να διαβαστούν πίσω. Αν έχει οριστεί PIN_KEY, κρατιέται και ένα αντίγραφο κρυπτογραφημένο με AES‑GCM ώστε να μπορεί να το δει ο διαχειριστής· το κλειδί βρίσκεται μόνο στο .env, ποτέ στη βάση.
  • Κωδικοί καρτών QR, tokens συσκευών, κωδικοί εγγραφής και tokens συνδέσμων: αποθηκεύονται μόνο ως σύνοψη SHA‑256. Οι κωδικοί QR κρυπτογραφούνται επιπλέον με το PIN_KEY, ώστε η κάρτα να μπορεί να εμφανιστεί ξανά.
  • Κωδικός ΕΡΓΑΝΗ: στο .env, ή, αν τον βάλετε από τη σελίδα διαχείρισης, στη βάση κρυπτογραφημένος με AES‑GCM και το PIN_KEY (όπως και το token του ntfy). Δεν επιστρέφεται ποτέ στη σελίδα.
  • Αντίγραφα στο cloud: κρυπτογραφούνται στο μηχάνημά σας πριν ανέβουν (restic, AES-256)· ο πάροχος του cloud δεν μπορεί να τα διαβάσει. Ο κωδικός κρυπτογράφησης και η πρόσβαση στο cloud φυλάσσονται στο μηχάνημα (/data/cloud-password, /data/rclone.conf, μόνο για την Karta)· στο Google Drive η Karta βλέπει μόνο τα αρχεία που φτιάχνει η ίδια.

Ελαχιστοποίηση δεδομένων

  • Από τα στοιχεία εργαζομένων του ΕΡΓΑΝΗ (που περιλαμβάνουν έγγραφα ταυτότητας, αμοιβές και οικογενειακά στοιχεία), η Karta κρατά μόνο ΑΦΜ, ονοματεπώνυμο και δηλωμένο ωράριο. Τα υπόλοιπα απορρίπτονται αμέσως και δεν καταγράφονται ποτέ.
  • Το αρχείο ενεργειών (audit log) δεν αποθηκεύει ποτέ ολόκληρο ΑΦΜ (μόνο τα 3 τελευταία ψηφία).
  • Η οθόνη του καταστήματος και η κάρτα στο κινητό δείχνουν μόνο το όνομα εμφάνισης.

Θωράκιση της εφαρμογής

  • Αυστηρό Content‑Security‑Policy: χωρίς inline scripts ή styles και χωρίς περιεχόμενο τρίτων. Οι σελίδες δεν μπορούν να ενσωματωθούν σε άλλα sites.
  • Μόνο οι σελίδες της ίδιας της Karta μπορούν να χρησιμοποιήσουν την κάμερα. Μικρόφωνο, τοποθεσία, πληρωμές και USB είναι απενεργοποιημένα.
  • Cache-Control: no-store σε κάθε απάντηση.
  • Κρυμμένη από τις μηχανές αναζήτησης: το /robots.txt απαγορεύει τα πάντα, και κάθε απάντηση έχει X-Robots-Tag: noindex, nofollow, ….
  • Το image του Docker τρέχει ως χρήστης χωρίς δικαιώματα διαχειριστή, χωρίς banner server και χωρίς access log.

Από πού έρχεται το image

Το image της Karta χτίζεται μόνο από το GitHub Actions του έργου, με υπογεγραμμένη προέλευση (build provenance) και SBOM. Έλεγχος: gh attestation verify oci://ghcr.io/osergios/karta:<έκδοση> --owner osergios.

Αρχείο ενεργειών

Οι ενέργειες του διαχειριστή (νέο PIN, έκδοση QR, αλλαγές ωραρίου, άδειες, αποχωρήσεις που καταχωρίστηκαν με το χέρι, εγγραφή συσκευών, διαγραφές…) γράφονται σε πίνακα ελέγχου με το ποιος τις έκανε και πότε.

Οι δικές σας ευθύνες

  • Λειτουργήστε την Karta μόνο μέσω HTTPS, και κρατήστε το /admin πίσω από το Cloudflare Access.
  • Κρατήστε το .env ιδιωτικό και με αντίγραφο (ιδίως το PIN_KEY)· μην το ανεβάσετε ποτέ στο GitHub.
  • Κρατάτε τακτικά αντίγραφα της βάσης, και εκτός μηχανήματος (δείτε Αντίγραφα ασφαλείας). Τα χτυπήματα φυλάσσονται για τουλάχιστον 5 χρόνια.
  • Τα πραγματικά χτυπήματα είναι νόμιμα αρχεία χρόνου εργασίας. Η Karta δεν σβήνει εργαζόμενο που έχει πραγματικά χτυπήματα· απενεργοποιήστε τον.
  • Είστε υπεύθυνοι για τις δηλώσεις που γίνονται στο ΕΡΓΑΝΗ από την εγκατάστασή σας. Δοκιμάστε πρώτα με dry_run και trial (δείτε Έναρξη κανονικής λειτουργίας).

Αναφορά προβλήματος ασφαλείας

Μην ανοίξετε δημόσιο issue. Χρησιμοποιήστε την ιδιωτική αναφορά ευπάθειας του GitHub· δείτε την πολιτική ασφαλείας.

Clone this wiki locally