Λίστα ελέγχου ασφαλείας για εφαρμογές με AI: τι να ελέγξεις πριν από την κυκλοφορία
Πριν χρησιμοποιήσουν πραγματικοί άνθρωποι μια εφαρμογή που έφτιαξες με AI, έλεγξε επτά πράγματα: κάθε σελίδα και κάθε API ελέγχει ποιος είναι ο χρήστης και τι επιτρέπεται να κάνει· τα μυστικά κλειδιά ζουν στον server, ποτέ στον browser ή στη συνομιλία· κάθε είσοδος επικυρώνεται στον server· κάθε χρήστης φτάνει μόνο στις δικές του εγγραφές· η σύνδεση και τα ακριβά endpoints έχουν rate limit· τα dependencies είναι ενημερωμένα· και μπορείς να επαναφέρεις τα δεδομένα σου αν κάτι πάει στραβά. Η λίστα παρακάτω μετατρέπει το καθένα σε συγκεκριμένα τεστ που μπορείς να κάνεις χωρίς να διαβάσεις κώδικα.
Τα εργαλεία δημιουργίας με AI είναι καλά στο να κάνουν τα χαρακτηριστικά να δουλεύουν. Δεν είναι αυτομάτως προσεκτικά, γιατί το «προσεκτικά» σπάνια μπαίνει στην εντολή. Τα περισσότερα από τα προβλήματα παρακάτω προέρχονται από πράγματα που κανείς δεν ζήτησε, άρα η λύση είναι συνήθως να το ζητήσεις.
Πώς να χρησιμοποιήσεις αυτή τη λίστα
Κάνε την με τη σειρά και για κάθε στοιχείο κάνε δύο πράγματα: ζήτα από το AI να βεβαιωθεί ότι είναι καλυμμένο, και δοκίμασέ το μόνος σου. Το AI μπορεί να γράψει έναν έλεγχο δικαιωμάτων· μόνο ένα τεστ σου λέει ότι λειτουργεί. Τα στοιχεία σημειώνονται ως εξής:
- Υποχρεωτικό — κάνε το πριν το χρησιμοποιήσει οποιοσδήποτε άλλος την εφαρμογή.
- Σχεδόν υποχρεωτικό — κάνε το πριν έχεις πραγματικούς χρήστες ή πραγματικά δεδομένα.
- Για αργότερα — αξίζει όσο μεγαλώνει η εφαρμογή.
Αν έχεις μόνο μία ώρα, κάνε όλα τα Υποχρεωτικά.
1. Ταυτοποίηση: ποιος είναι αυτός;
Η ταυτοποίηση σημαίνει να επιβεβαιώνεις ποιος είναι κάποιος, συνήθως με σύνδεση. Δες τι είναι η ταυτοποίηση για τα βασικά και πώς να προσθέσεις σύνδεση στην εφαρμογή σου για τις επιλογές.
- Υποχρεωτικό: Κάθε σελίδα που δείχνει ιδιωτικά δεδομένα απαιτεί σύνδεση. Τεστ: αποσυνδέσου και επικόλλησε απευθείας στον browser το URL μιας ιδιωτικής σελίδας.
- Υποχρεωτικό: Κάθε API endpoint πίσω από αυτές τις σελίδες απαιτεί επίσης σύνδεση, όχι μόνο η σελίδα. Τεστ: αποσυνδέσου, άνοιξε την καρτέλα δικτύου του browser και ξαναστείλε ένα αίτημα που έκανε η εφαρμογή όσο ήσουν συνδεδεμένος.
- Υποχρεωτικό: Οι κωδικοί αποθηκεύονται κατακερματισμένοι (hashed) με έναν αργό αλγόριθμο κατακερματισμού κωδικών, ποτέ σε καθαρό κείμενο. Η καθοδήγηση του OWASP για την αποθήκευση κωδικών προτείνει πρώτα το Argon2id, με scrypt, bcrypt ή PBKDF2 ως εναλλακτικές. Ρώτα: «Πώς αποθηκεύονται οι κωδικοί;»
- Σχεδόν υποχρεωτικό: Οι σύνδεσμοι επαναφοράς κωδικού λήγουν και δουλεύουν μία μόνο φορά.
- Σχεδόν υποχρεωτικό: Τα cookies συνεδρίας έχουν σημανθεί
Secure,HttpOnlyκαιSameSite, και η αποσύνδεση τερματίζει τη συνεδρία στον server. - Για αργότερα: Πρόσφερε έλεγχο ταυτότητας δύο παραγόντων, ή σύνδεση μέσω παρόχου που τον έχει.
Έλεγξε κάθε route API και σελίδα που επιστρέφει δεδομένα χρηστών. Καθένα πρέπει να απορρίπτει αιτήματα από χρήστες που δεν έχουν συνδεθεί, στον server και όχι μόνο στον κώδικα της σελίδας. Παράθεσε τα routes που έλεγξες.
2. Εξουσιοδότηση: τι επιτρέπεται να κάνουν;
Η εξουσιοδότηση είναι το βήμα μετά τη σύνδεση: αποφασίζει τι επιτρέπεται να δει και να αλλάξει αυτός ο συγκεκριμένος χρήστης. Εδώ οι εφαρμογές που φτιάχνονται με AI έχουν συχνά σοβαρές τρύπες, επειδή η εφαρμογή φαίνεται σωστή (ο πίνακας κάθε χρήστη δείχνει μόνο τα δικά του δεδομένα) ενώ ο server θα δώσει τα δεδομένα οποιουδήποτε αν του ζητηθούν απευθείας.
- Υποχρεωτικό: Κάθε ανάγνωση, ενημέρωση και διαγραφή ελέγχει, στον server, ότι η εγγραφή ανήκει στον τρέχοντα χρήστη (ή στην ομάδα του).
- Υποχρεωτικό: Τεστ: δημιούργησε δύο λογαριασμούς, Α και Β. Ως Α, άνοιξε μία από τις εγγραφές του Α και σημείωσε το ID στο URL ή στο αίτημα δικτύου. Συνδέσου ως Β και ζήτα το ίδιο ID. Ο Β πρέπει να πάρει σφάλμα, όχι τα δεδομένα του Α.
- Υποχρεωτικό: Οι σελίδες διαχειριστή και τα API endpoints διαχειριστή ελέγχουν τον ρόλο του χρήστη στον server. Το να κρύβεις τον σύνδεσμο διαχειριστή δεν είναι προστασία.
- Υποχρεωτικό: Οι χρήστες δεν μπορούν να αλλάξουν τον δικό τους ρόλο, τιμή, υπόλοιπο ή πεδία ιδιοκτήτη επεξεργαζόμενοι το αίτημα. Τεστ: στην καρτέλα δικτύου, δες τι στέλνει μια ενημέρωση προφίλ. Αν περιλαμβάνει πεδία όπως
roleήisAdmin, ζήτα από το AI να τα αγνοεί από την πλευρά του πελάτη. - Σχεδόν υποχρεωτικό: Τα IDs στα URLs είναι δύσκολο να μαντευτούν (τυχαία IDs αντί για 1, 2, 3). Δεν αντικαθιστά τους ελέγχους δικαιωμάτων, αλλά περιορίζει τη ζημιά όταν ένας τέτοιος λείπει.
Για κάθε endpoint που διαβάζει ή αλλάζει εγγραφή, έλεγξε στον server ότι ο συνδεδεμένος χρήστης την κατέχει ή έχει δικαίωμα πρόσβασης. Επέστρεψε 404 αν όχι. Μετά δείξε μου πώς θα το δοκίμαζα με δύο λογαριασμούς.
3. Πρόσβαση σε επίπεδο γραμμής στη βάση δεδομένων
Η «πρόσβαση σε επίπεδο γραμμής» σημαίνει ότι κάθε γραμμή ενός πίνακα (μία κράτηση, ένα τιμολόγιο) είναι ορατή μόνο στους χρήστες στους οποίους ανήκει. Υπάρχουν δύο συνηθισμένοι τρόποι να επιβληθεί:
| Προσέγγιση | Πώς λειτουργεί | Τι να προσέξεις |
|---|---|---|
| Στον κώδικα του server | Κάθε ερώτημα περιλαμβάνει φίλτρο όπως «όπου ο ιδιοκτήτης είναι ο τρέχων χρήστης» | Ένα ξεχασμένο φίλτρο εκθέτει τα πάντα |
| Στη βάση δεδομένων (π.χ. row-level security στο Postgres) | Η ίδια η βάση αρνείται τις γραμμές που ο χρήστης δεν βλέπει | Περισσότερη ρύθμιση· ο server πρέπει να συνδέεται ως ο σωστός χρήστης |
Και τα δύο μπορούν να γίνουν σωστά. Αυτό που μετράει:
- Υποχρεωτικό: Αν ο browser μιλάει απευθείας με τη βάση δεδομένων (ορισμένα φιλοξενούμενα προϊόντα βάσεων το επιτρέπουν), οι κανόνες γραμμής είναι ενεργοποιημένοι για κάθε πίνακα. Χωρίς αυτούς, όποιος έχει το δημόσιο κλειδί μπορεί να διαβάσει ολόκληρο τον πίνακα.
- Υποχρεωτικό: Τα ερωτήματα φιλτράρουν με τον τρέχοντα χρήστη ή την ομάδα, όχι με ένα ID που στέλνει ο browser.
- Σχεδόν υποχρεωτικό: Τα κοινά δεδομένα (τα έργα μιας ομάδας) έχουν σαφή κανόνα για το ποιος ανήκει στην ομάδα, επιβαλλόμενο σε ένα μόνο σημείο.
4. Μυστικά και κλειδιά API
Ένα κλειδί API είναι κωδικός πρόσβασης για μια υπηρεσία. Τα Stripe, τα email και οι πάροχοι AI χρησιμοποιούν όλα τέτοια κλειδιά. Για το υπόβαθρο, δες τι είναι οι μεταβλητές περιβάλλοντος και τα μυστικά.
- Υποχρεωτικό: Τα κλειδιά αποθηκεύονται στις μεταβλητές περιβάλλοντος ή στα secrets του έργου, ποτέ γραμμένα μέσα στον κώδικα.
- Υποχρεωτικό: Τα κλειδιά που μπορούν να ξοδέψουν χρήματα ή να διαβάσουν ιδιωτικά δεδομένα χρησιμοποιούνται μόνο στον server. Τεστ: άνοιξε το live site σου, δες τον πηγαίο κώδικα της σελίδας και τα αρχεία JavaScript στα devtools, και ψάξε την αρχή του κλειδιού σου (για παράδειγμα
sk_). Δεν πρέπει να εμφανίζεται. - Υποχρεωτικό: Τα κλειδιά δεν επικολλήθηκαν ποτέ στη συνομιλία, σε δημόσιο αποθετήριο ή σε screenshot. Αν έγινε, ανανέωσέ το στον πάροχο (δημιούργησε νέο και διάγραψε το παλιό).
- Σχεδόν υποχρεωτικό: Χρησιμοποίησε περιορισμένα ή scoped κλειδιά όπου τα προσφέρει ο πάροχος. Η Stripe, για παράδειγμα, προτείνει περιορισμένα κλειδιά που έχουν μόνο τα δικαιώματα που χρειάζεται η ενσωμάτωσή σου.
- Σχεδόν υποχρεωτικό: Τα κλειδιά δοκιμής και τα live κλειδιά είναι χωριστά, και η live εφαρμογή χρησιμοποιεί live κλειδιά μόνο όταν είσαι έτοιμος.
Μερικά κλειδιά είναι σχεδιασμένα να είναι δημόσια, όπως το δημοσιεύσιμο κλειδί της Stripe (pk_…) ή ένα κλειδί χαρτών περιορισμένο στο domain σου. Ο κανόνας αφορά τα κλειδιά που δίνουν δύναμη, όχι κάθε συμβολοσειρά που μοιάζει με κλειδί.
5. Επικύρωση εισόδου
Οτιδήποτε στέλνει ένας χρήστης (πεδία φορμών, μεταφορτώσεις αρχείων, παράμετροι URL) μπορεί να είναι οτιδήποτε, όχι μόνο αυτό που επιτρέπει η φόρμα σου.
- Υποχρεωτικό: Η επικύρωση γίνεται στον server, όχι μόνο στον browser. Οι έλεγχοι στον browser είναι για ευκολία· ο καθένας μπορεί να τους παρακάμψει.
- Υποχρεωτικό: Τα ερωτήματα βάσης δεδομένων χρησιμοποιούν παραμέτρους, όχι κείμενο συγκολλημένο από την είσοδο του χρήστη (έτσι αποτρέπεται η SQL injection). Ζήτα από το AI να το επιβεβαιώσει.
- Υποχρεωτικό: Το κείμενο που πληκτρολογούν οι χρήστες εμφανίζεται ως κείμενο, όχι εκτελείται ως HTML. Τεστ: γράψε
<b>hello</b>ως όνομά σου. Πρέπει να βλέπεις τις ετικέτες, όχι έντονο κείμενο. - Σχεδόν υποχρεωτικό: Οι μεταφορτώσεις αρχείων ελέγχουν τύπο και μέγεθος, και τα αρχεία που ανεβαίνουν δεν σερβίρονται από το κύριο domain της εφαρμογής ως εκτελέσιμες σελίδες.
- Σχεδόν υποχρεωτικό: Τα σφάλματα που βλέπουν οι χρήστες είναι απλά («Κάτι πήγε στραβά»)· τα λεπτομερή σφάλματα πηγαίνουν μόνο στα logs του server.
- Σχεδόν υποχρεωτικό: Τα webhooks από υπηρεσίες όπως η Stripe επαληθεύουν την υπογραφή του παρόχου πριν ενεργήσουν. Δες τι είναι ένα webhook.
Πρόσθεσε επικύρωση στον server σε κάθε φόρμα και κάθε endpoint API: υποχρεωτικά πεδία, μήκη, μορφές και επιτρεπτές τιμές. Απέρριψε οτιδήποτε άλλο με σαφές μήνυμα. Μην δείχνεις εσωτερικές λεπτομέρειες σφάλματος στους χρήστες.
6. Όρια ρυθμού και κατάχρηση
Ένα rate limit περιορίζει πόσα αιτήματα μπορεί να κάνει κάποιος σε μία περίοδο. Χωρίς αυτά, ο καθένας μπορεί να μαντεύει κωδικούς όλη την ημέρα, να πλημμυρίζει τη φόρμα εγγραφής σου ή να ανεβάζει τον λογαριασμό σου σε έναν πληρωμένο API.
- Υποχρεωτικό: Η σύνδεση, η εγγραφή και η επαναφορά κωδικού έχουν rate limit ανά διεύθυνση IP και ανά λογαριασμό.
- Υποχρεωτικό: Οτιδήποτε κοστίζει χρήματα ανά κλήση (αιτήματα σε μοντέλα AI, SMS, email) έχει όριο ανά χρήστη και απαιτεί σύνδεση.
- Σχεδόν υποχρεωτικό: Οι δημόσιες φόρμες (επικοινωνία, λίστα αναμονής) έχουν προστασία από spam: ένα rate limit, ένα κρυφό πεδίο honeypot ή CAPTCHA.
- Σχεδόν υποχρεωτικό: Όρισε ανώτατα ορια δαπάνης ή ειδοποιήσεις στους πληρωμένους παρόχους σου, ώστε ένα σφάλμα ή ένας επιτιθέμενος να μην μπορεί να παράγει απεριόριστο λογαριασμό.
7. Εξαρτήσεις
Οι εφαρμογές χτίζονται από πακέτα ανοιχτού κώδικα, και τα πακέτα μερικές φορές έχουν γνωστές ευπάθειες.
- Σχεδόν υποχρεωτικό: Ζήτα από το AI να ελέγξει για γνωστές ευπάθειες (για έργα JavaScript,
npm auditή το ισοδύναμο του διαχειριστή πακέτων σου) και να ενημερώσει όσα επηρεάζονται. - Σχεδόν υποχρεωτικό: Αφαίρεσε τα πακέτα που η εφαρμογή δεν χρησιμοποιεί πια.
- Σχεδόν υποχρεωτικό: Να είσαι επιφυλακτικός με πακέτα με πολύ λίγους χρήστες ή ονόματα που μοιάζουν με ορθογραφικά λάθη δημοφιλών.
- Για αργότερα: Έλεγξε ξανά κάθε μήνα ή δύο, ή ενεργοποίησε αυτόματες ειδοποιήσεις αν ο κώδικάς σου είναι στο GitHub.
8. Αντίγραφα ασφαλείας και ανάκτηση
Η ασφάλεια περιλαμβάνει και τη δυνατότητα να ανακάμψεις από λάθη, δικά σου, του AI ή ενός επιτιθέμενου.
- Υποχρεωτικό: Ξέρε πού βρίσκονται τα δεδομένα σου και αν έχουν αντίγραφο ασφαλείας. Μην το υποθέτεις· έλεγξε την τεκμηρίωση του παρόχου σου.
- Σχεδόν υποχρεωτικό: Κράτα δική σου περιοδική εξαγωγή των σημαντικών δεδομένων (για παράδειγμα, εξαγωγή CSV ή αντίγραφο βάσης), αποθηκευμένη κάπου χωριστά.
- Σχεδόν υποχρεωτικό: Κράτα τον κώδικά σου σε σύστημα ελέγχου εκδόσεων, ώστε να μπορείς να επαναφέρεις οποιαδήποτε έκδοση.
- Σχεδόν υποχρεωτικό: Οι καταστροφικές ενέργειες (διαγραφή λογαριασμού, διαγραφή έργου) ζητούν επιβεβαίωση, και σκέψου μια «μαλακή διαγραφή» που μπορεί να αναιρεθεί για κάποιο διάστημα.
- Για αργότερα: Δοκίμασε μία φορά πραγματικά μια επαναφορά. Ένα αντίγραφο ασφαλείας που δεν έχεις ποτέ επαναφέρει είναι ελπίδα, όχι σχέδιο.
9. Πριν την κυκλοφορία
- Υποχρεωτικό: Η live σελίδα χρησιμοποιεί HTTPS παντού.
- Υποχρεωτικό: Τα δείγματα δεδομένων, οι δοκιμαστικοί λογαριασμοί και οι σελίδες αποσφαλμάτωσης της ανάπτυξης έχουν αφαιρεθεί.
- Σχεδόν υποχρεωτικό: Μια πολιτική απορρήτου λέει τι δεδομένα συλλέγεις και γιατί — απαιτείται σε πολλά μέρη αν συλλέγεις προσωπικά δεδομένα. Μην διεκδικείς πιστοποιήσεις (SOC 2, HIPAA) που δεν έχεις.
- Σχεδόν υποχρεωτικό: Έχεις τρόπο να σε ενημερώνουν για ζητήματα ασφάλειας, και ξέρεις πώς να ανανεώσεις γρήγορα κάθε κλειδί.
Για ευρύτερο έλεγχο πριν την κυκλοφορία, πέρα από την ασφάλεια, δες πώς να πας ένα πρωτότυπο AI στην παραγωγή.
Πότε να ζητήσεις επαγγελματικό έλεγχο
Μια λίστα πιάνει συνηθισμένα λάθη· δεν αντικαθιστά έναν ειδικό. Σκέψου να πληρώσεις για έλεγχο αν επεξεργάζεσαι μόνος σου αριθμούς καρτών αντί για φιλοξενούμενη σελίδα πληρωμής, αποθηκεύεις δεδομένα υγείας, οικονομικά ή δεδομένα παιδιών, πουλάς σε εταιρείες που ζητούν ερωτηματολόγια ασφαλείας ή θα βλάπτεσαι σοβαρά από διαρροή. Το να μπορεί να εξαχθεί ο κώδικάς σου κάνει τον έλεγχο πολύ πιο εύκολο.
Ασφάλεια όταν φτιάχνεις στο Mythex
Το Mythex δεν έχει ξεχωριστό πίνακα σάρωσης ασφαλείας, γι' αυτό η λίστα παραπάνω είναι η διαδικασία που πρέπει να ακολουθήσεις. Μερικά πράγματα που βοηθούν:
- Μυστικά έργου. Αποθήκευσε τα κλειδιά από τις ρυθμίσεις του έργου → Secrets, ή μέσω της κάρτας μυστικών που δείχνει ο agent στη συνομιλία, ώστε να μένουν έξω από τον κώδικα και τα μηνύματα. Μετά την αλλαγή ενός μυστικού για μια live εφαρμογή, δημοσίευσε ξανά.
- Λειτουργία σχεδίου και Ερώτησης. Ζήτα από τον agent να ελέγξει τα δικαιώματα χωρίς να αλλάξει κώδικα: «Σε λειτουργία Ask, κατάγραψε κάθε route API και τον έλεγχο δικαιωμάτων που κάνει».
- Το
/testβάζει τον agent να περάσει από την προεπισκόπησή σου ως χρήστης, χρήσιμο για το τεστ με δύο λογαριασμούς της ενότητας 2. - Τα checkpoints σου επιτρέπουν να γυρίσεις πίσω μια αλλαγή που χάλασε κάτι.
Δες Ασφάλεια για εφαρμογές που φτιάχνεις και Μεταβλητές περιβάλλοντος και μυστικά στην τεκμηρίωση. Αν προσθέτεις σύντομα λογαριασμούς χρηστών, διάβασε πώς να προσθέσεις σύνδεση στην εφαρμογή σου.
Ερωτήσεις
Είναι οι εφαρμογές που φτιάχνονται με AI λιγότερο ασφαλείς;
Όχι αυτομάτως, αλλά τα εργαλεία δημιουργίας με AI βελτιστοποιούν για το να δουλεύουν τα πράγματα, και οι έλεγχοι ασφαλείας εύκολα παραλείπονται όταν κανείς δεν τους ζητήσει. Τα πιο συνηθισμένα κενά είναι οι λείπουν οι έλεγχοι δικαιωμάτων στον server και τα κλειδιά API που βρίσκονται εκεί όπου ο browser μπορεί να τα διαβάσει.
Ποιος είναι ο πιο σημαντικός έλεγχος ασφαλείας για μια εφαρμογή με AI;
Συνδέσου ως ένας χρήστης και προσπάθησε να δεις ή να αλλάξεις τα δεδομένα ενός άλλου χρήστη, τόσο μέσα από τις σελίδες της εφαρμογής όσο και αλλάζοντας IDs στα URLs. Η κακή διαχείριση πρόσβασης σαν αυτή βρίσκεται πρώτη στη λίστα OWASP Top 10:2025 με τους κινδύνους ασφαλείας web εφαρμογών.
Πού πρέπει να μπαίνουν τα κλειδιά API σε μια εφαρμογή που φτιάχνεται με AI;
Στις μεταβλητές περιβάλλοντος ή στα secrets του έργου, και να χρησιμοποιούνται μόνο από κώδικα στον server. Τα κλειδιά που μπορούν να ξοδέψουν χρήματα ή να διαβάσουν ιδιωτικά δεδομένα δεν πρέπει ποτέ να εμφανίζονται στον κώδικα του browser, στη συνομιλία ή σε αποθετήριο Git.
Χρειάζομαι έλεγχο ασφαλείας πριν από την κυκλοφορία;
Για μια μικρή εφαρμογή με δεδομένα χαμηλού κινδύνου, το να περάσεις από μια λίστα σαν αυτή είναι λογική αρχή. Αν διαχειρίζεσαι απευθείας πληρωμές, δεδομένα υγείας, οικονομικά ή δεδομένα παιδιών, ή έχεις συμβατικές απαιτήσεις ασφαλείας, βάλε έναν κατάλληλο άνθρωπο να την ελέγξει.