File uploads σε portals και custom εφαρμογές: ασφάλεια πριν δεχτείτε PDF, εικόνες και έγγραφα
Σε customer portals, CRM και custom εφαρμογές, το upload αρχείων είναι συχνά βασική λειτουργία. Πελάτες ανεβάζουν έγγραφα, φωτογραφίες, αιτήσεις, βιογραφικά, τιμολόγια ή τεχνικά αρχεία.
Η λειτουργία φαίνεται απλή: ένα κουμπί, επιλογή αρχείου, αποστολή. Τεχνικά όμως είναι από τα σημεία που χρειάζονται σοβαρό σχεδιασμό, γιατί το σύστημα δέχεται περιεχόμενο από έξω.
Γιατί τα uploads έχουν ρίσκο
Το OWASP επισημαίνει ότι τα uploaded files μπορούν να δημιουργήσουν σημαντικό κίνδυνο για εφαρμογές. Ένα αρχείο μπορεί να είναι πολύ μεγάλο, λάθος τύπου, κακόβουλο, να περιέχει ενεργό περιεχόμενο ή να χρησιμοποιηθεί για phishing και κατάχρηση storage.
Πιθανά προβλήματα:
- upload εκτελέσιμου αρχείου
- double extensions όπως
invoice.pdf.php - spoofed Content-Type header
- πολύ μεγάλα αρχεία που γεμίζουν storage
- malicious documents
- πρόσβαση άλλων χρηστών σε αρχεία που δεν πρέπει
- δημόσια URLs χωρίς έλεγχο
- filenames που προκαλούν path traversal ή conflicts
Αν το portal διαχειρίζεται προσωπικά ή επιχειρησιακά δεδομένα, το ρίσκο αυξάνεται.
Allowlist, όχι απλώς blocklist
Η ασφαλής προσέγγιση ξεκινά με allowlist. Δηλαδή επιτρέπετε μόνο τους τύπους αρχείων που χρειάζεται η εφαρμογή.
Παράδειγμα:
- για αιτήσεις: PDF και DOCX
- για εικόνες προϊόντων: JPG, PNG ή WebP
- για λογιστικά παραστατικά: PDF
Δεν χρειάζεται να δέχεστε ZIP, scripts, HTML ή άγνωστα formats αν δεν υπάρχει συγκεκριμένος επιχειρησιακός λόγος.
Η επέκταση δεν αρκεί. Πρέπει να γίνεται και έλεγχος MIME type και, όπου γίνεται, file signature. Το Content-Type που στέλνει ο browser δεν πρέπει να θεωρείται αξιόπιστο από μόνο του.
Storage και filenames
Το αρχικό filename δεν πρέπει να χρησιμοποιείται ως πραγματικό server filename. Καλύτερα να δημιουργείται ασφαλές εσωτερικό όνομα, για παράδειγμα με UUID, και το αρχικό filename να κρατιέται μόνο ως metadata αν χρειάζεται.
Πρακτικές επιλογές:
- storage εκτός webroot ή σε object storage με ελεγχόμενη πρόσβαση
- signed URLs με λήξη για downloads
- ξεχωριστά permissions για upload και download
- όρια μεγέθους ανά τύπο αρχείου
- antivirus ή malware scanning όπου είναι εφικτό
- audit log για upload, download και delete
Αν ένα αρχείο πρέπει να είναι δημόσιο, χρειάζεται ξεκάθαρος λόγος και μηχανισμός ελέγχου.
Permissions ανά χρήστη και οργανισμό
Σε portals, δεν αρκεί να είναι ο χρήστης logged in. Πρέπει να έχει δικαίωμα για το συγκεκριμένο αρχείο.
Παραδείγματα κανόνων:
- ο πελάτης βλέπει μόνο τα αρχεία της δικής του εταιρείας
- ένας εξωτερικός συνεργάτης βλέπει μόνο συγκεκριμένα projects
- η εσωτερική ομάδα έχει ρόλους ανά τμήμα
- διαγραφή επιτρέπεται μόνο σε συγκεκριμένους ρόλους
- αρχεία με ευαίσθητα δεδομένα έχουν επιπλέον περιορισμούς
Τα περισσότερα σοβαρά λάθη δεν είναι στο upload button. Είναι στο authorization όταν κάποιος προσπαθεί να δει ή να κατεβάσει αρχείο.
UX που δεν κρύβει τους κανόνες
Η ασφάλεια πρέπει να φαίνεται καθαρά στον χρήστη χωρίς να τον μπερδεύει.
Χρήσιμα στοιχεία:
- αναφορά επιτρεπόμενων τύπων αρχείων
- μέγιστο μέγεθος αρχείου πριν το upload
- σαφή μηνύματα λάθους
- progress indicator
- επιβεβαίωση ότι το αρχείο ανέβηκε
- ένδειξη κατάστασης αν περνά scanning
- δυνατότητα αντικατάστασης αρχείου με audit trail όπου χρειάζεται
Αν ο χρήστης δεν καταλαβαίνει γιατί απορρίφθηκε ένα αρχείο, θα δοκιμάζει τυχαία ή θα επιστρέψει στο email.
Πώς το κάνει η Ai Foundry
Στην Ai Foundry σχεδιάζουμε file uploads ως μέρος της συνολικής ασφάλειας και λειτουργίας μιας custom εφαρμογής. Ορίζουμε από την αρχή ποιοι τύποι αρχείων επιτρέπονται, πού αποθηκεύονται, ποιος έχει πρόσβαση, τι καταγράφεται και πώς ενημερώνεται η ομάδα.
Σε customer portals, CRM και web applications αυτό είναι κρίσιμο. Συνδυάζουμε UX, backend validation, role-based access, audit logs και integrations ώστε το upload να είναι χρήσιμο στην καθημερινή ροή χωρίς να ανοίγει περιττό ρίσκο.
Checklist πριν ενεργοποιήσετε uploads
Ελέγξτε:
- αν υπάρχει allowlist αρχείων
- αν γίνεται server-side validation
- αν ελέγχεται μέγεθος αρχείου
- αν αποφεύγεται το αρχικό filename ως storage name
- αν τα αρχεία αποθηκεύονται με ελεγχόμενη πρόσβαση
- αν υπάρχουν permissions ανά χρήστη και οργανισμό
- αν υπάρχει scanning όπου χρειάζεται
- αν καταγράφονται upload, download και delete actions
- αν τα errors είναι καθαρά για τον χρήστη
Το upload αρχείων είναι χρήσιμο όταν είναι ελεγχόμενο. Αν μπει πρόχειρα, γίνεται ένα από τα πιο αδύναμα σημεία μιας εφαρμογής.