Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Οι μονάδες μεταφόρτωσης αρχείων είναι ένας από τους πιο αδύναμους κρίκους σε εφαρμογές web. Οποιαδήποτε λάθη γίνονται, ακόμη και αυτά που θεωρείτε μικρά, θα μπορούσαν να έχουν ως αποτέλεσμα ο έλεγχος του διακομιστή να πέσει απευθείας στα χέρια ενός κυβερνοεπιτιθέμενου. Για το λόγο αυτό, οι προγραμματιστές λογισμικού πρέπει να γνωρίζουν τα πιο συνηθισμένα λάθη και ορισμένες μεθόδους επίθεσης που μπορεί να προκύψουν.

Τι είναι λοιπόν η παραβίαση από την πλευρά του πελάτη; Πώς μπορείτε να το καταπολεμήσετε αυτό για να διατηρήσετε τους ιστότοπούς σας και τους χρήστες σας ασφαλείς;

Τι είναι η παραβίαση από την πλευρά του πελάτη;

Η παραβίαση από την πλευρά του πελάτη είναι η βασική έννοια των επιθέσεων διαδικτυακών εφαρμογών στο σύνολό τους. Με απλά λόγια, σημαίνει ότι δεν μπορείτε πλέον να εμπιστεύεστε κανένα από τα δεδομένα που στέλνετε στον χρήστη. Επιπλέον, η παραβίαση από την πλευρά του πελάτη είναι ένα από τα θεμέλια της ασφαλούς ανάπτυξης εφαρμογών. Εάν εξετάσετε τη μονάδα μεταφόρτωσης αρχείων με την οποία αντιμετωπίζετε και εξετάσετε την παραβίαση από την πλευρά του πελάτη, τα δεδομένα που δεν μπορείτε να εμπιστευτείτε περιλαμβάνουν:

instagram viewer

  • Το όνομα του μεταφορτωμένου αρχείου.
  • Ο τύπος περιεχομένου του μεταφορτωμένου αρχείου.

Αυτά τα δύο στοιχεία είναι που έχετε την ευκαιρία να μπείτε στη λίστα επιτρεπόμενων ως προγραμματιστής λογισμικού. Τα δεδομένα ονόματος του μεταφορτωμένου αρχείου μπορεί να περιέχουν οτιδήποτε με παραποίηση από την πλευρά του πελάτη. Με τα δεδομένα τύπου περιεχομένου του μεταφορτωμένου αρχείου, ακόμα κι αν ο εισβολέας ανεβάζει ένα αρχείο .exe, αυτό το αρχείο μπορεί να εμφανίζεται ως εικόνα/jpeg στο σύστημα.

Επέκταση αρχείου και λευκή καταχώριση

Κατά την ανάπτυξη μονάδων μεταφόρτωσης αρχείων, το πρώτο πράγμα που πρέπει να κάνετε είναι τη διαδικασία εγγραφής στη λίστα επιτρεπόμενων για την επέκταση αρχείου. Για παράδειγμα, ένας χρήστης θέλει να ανεβάσει ένα αρχείο με το όνομα "muo.jpeg". Πρέπει να βεβαιωθείτε ότι αυτή η επέκταση αρχείου που θέλει να ανεβάσει ο χρήστης είναι .jpeg. Για αυτό, το σύστημα θα πρέπει να ελέγξει το μεταφορτωμένο αρχείο και να δει αν είναι μία από τις επιτρεπόμενες επεκτάσεις αρχείων. Για να κατανοήσετε πώς μπορείτε να το κάνετε αυτό, εξετάστε τον ακόλουθο απλό κώδικα PHP:

$file_parts = pathinfo($filename);
διακόπτης($file_parts['επέκταση'])
{
υπόθεση "jpg":
Διακοπή;

υπόθεση "νυχτερίδα": // Ή exe, dll, so, κ.λπ.
Διακοπή;

υπόθεση "":
υπόθεσηΜΗΔΕΝΙΚΟ: // Χωρίς επέκταση αρχείου
Διακοπή;
}

Μπορείτε να το κάνετε αυτό με ένα μπλοκ κώδικα παρόμοιο με το παραπάνω ή μπορείτε να χρησιμοποιήσετε τις κλάσεις και τις συναρτήσεις που παρέχονται από το πλαίσιο που χρησιμοποιείτε.

Προσέξτε να μην δημιουργήσετε δεδομένα επέκτασης αρχείου αναλύοντας το όνομα αρχείου σύμφωνα με τον χαρακτήρα τελείας (.), επειδή ο εισβολέας μπορεί να παρακάμψει αυτό το βήμα ελέγχου με ένα όνομα αρχείου όπως "muo.jpeg.php".

Τι είναι οι πληροφορίες τύπου περιεχομένου;

Οι πληροφορίες τύπου περιεχομένου είναι μια πληροφορία που αποστέλλεται στο αίτημα HTTP για κάθε μεταφόρτωση αρχείου. Το πρόγραμμα περιήγησης στο Διαδίκτυο εντοπίζει αυτές τις πληροφορίες και τις προσθέτει στο απεσταλμένο αίτημα. Ο εισβολέας μπορεί να προσπαθήσει να αλλάξει τις πληροφορίες με παραβίαση από την πλευρά του πελάτη και να παρακάμψει επικυρώσεις από την πλευρά του διακομιστή. Σε αυτό το στάδιο, οι προγραμματιστές χρειάζονται έναν μηχανισμό ελέγχου για να κάνουν επικυρώσεις στις πληροφορίες Τύπου περιεχομένου. Αυτό από μόνο του δεν θα είναι αρκετό. Ωστόσο, είναι ένα σημαντικό ζήτημα που πρέπει να προσέχουν οι προγραμματιστές.

Ας υποθέσουμε ότι κωδικοποιείτε έναν μηχανισμό για να ελέγχετε σωστά την επέκταση αρχείου και δέχεστε μόνο αρχεία με επέκταση .jpeg. Εκτός από αυτόν τον προληπτικό μηχανισμό, μπορείτε να ελέγξετε τις πληροφορίες Τύπου περιεχομένου ακριβώς μέσα θήκη και δέχονται μόνο αρχεία με πληροφορίες εικόνας/jpeg, ένα επιπλέον επίπεδο προστασίας από κυβερνοεπιθέσεις

Αρχεία SWF Flash και Βήματα επίθεσης

Η επέκταση αρχείου και τα δεδομένα τύπου περιεχομένου δεν σημαίνουν τίποτα για προγράμματα περιήγησης στο Διαδίκτυο που υποστηρίζουν πρόσθετα όπως το Adobe Flash Player. Παρόλο που η υποστήριξη για αυτήν τη συσκευή αναπαραγωγής δεν είναι πλέον διαθέσιμη, εξακολουθεί να είναι δυνατή η εγκατάσταση αυτών των σχετικών αρχείων σε πολλά συστήματα, παρόλο που το Flash παραμένει κίνδυνος για την ασφάλεια. Σε ένα σύστημα που δεν έχει λάβει τις σχετικές προφυλάξεις, είναι δυνατό να καλέσετε ένα αρχείο Flash με το ετικέτα, ανεξάρτητα από την επέκτασή της. Αυτό θα προκαλέσει ένα άλλο σοβαρό πρόβλημα ασφαλείας.

Προκειμένου να αναλάβουν δράση, οι προγραμματιστές πρέπει να γνωρίζουν τις οδούς που μπορούν να ακολουθήσουν οι εγκληματίες του κυβερνοχώρου. Δείτε πώς μπορεί να συμβεί:

  1. Ο κακόβουλος εισβολέας ανεβάζει ένα SWF (μορφή αρχείου Adobe Flash) με το όνομα "image.jpeg" στον ιστότοπο προορισμού. Κατά τη διαδικασία μεταφόρτωσης, επιβεβαιώνεται στην επαλήθευση της λίστας επιτρεπόμενων ότι το αρχείο που ανέβηκε από τον εισβολέα έχει επέκταση .jpeg. Η επαλήθευση τύπου περιεχομένου παρακάμπτεται με παραβίαση από την πλευρά του πελάτη. Φανταστείτε ότι αυτό το αρχείο, που ανέβηκε από τον παράγοντα απειλής, πηγαίνει στο "www (dot) target-site (dot) com/images/images.jpeg".
  2. Ας υποθέσουμε ότι ο εισβολέας έχει έναν ιστότοπο που ονομάζεται επιτιθέμενος (dot) com. Ο εισβολέας καλεί το αρχείο image.jpeg που έχει μεταφορτωθεί στον ιστότοπο-στόχο σε αυτόν τον ιστότοπο, χρησιμοποιώντας το ετικέτα με την ανάθεση τύπου εφαρμογής/x-shockwave-flash.
  3. Ένας αθώος χρήστης συνδέεται στην επιτιθέμενη (dot) com. Αυτή η τοποθεσία καλεί το αρχείο SWF στη διεύθυνση www (dot) target-site (dot) com/images/image.jpeg και εκτελεί τις εντολές που δίνονται στο SWF.
  4. Μέσω αυτού, ο κυβερνοεπιτιθέμενος μπορεί να δημιουργήσει ενέργειες αιτήματος HTTP για τη διεύθυνση com-site (dot) χωρίς να το αντιληφθούν οι κανονικοί χρήστες. Με αυτά τα αιτήματα, ο εισβολέας θα χρησιμοποιήσει τη συνεδρία του αθώου χρήστη και θα παρακάμψει τον έλεγχο CSRF.

Για να κατανοήσετε αυτό το σενάριο επίθεσης πιο ξεκάθαρα, θεωρήστε ότι ο παρακάτω κώδικας είναι σε HTML περιεχόμενο που αποστέλλεται στον χρήστη από εισβολέα (dot) com:

στυλ="ύψος: 1px; πλάτος: 1px;" δεδομένα="www.target-site.com/images/image.jpeg" τύπος="εφαρμογή/x-shockwave-flash" allowscriptaccess="πάντα" flashvars="c=διαβάζω&u=κάτι"

Μία από τις καλύτερες λύσεις είναι να αποκτήσετε πρόσβαση στα αρχεία που μεταφορτώνονται με τη μεταφόρτωση αρχείων μέσω διαφορετικό υποτομέα. Στο προαναφερθέν σενάριο, μπορείτε να αποκτήσετε πρόσβαση στα στατικά αρχεία όχι από τον ίδιο τομέα, αλλά από διαφορετικό υποτομέα ως εξής: "http (colon)//file.target-site (dot) com/images/image.jpeg".

Μια άλλη λύση είναι να προσθέσετε Περιεχόμενο-Διάθεση: συνημμένο πληροφορίες για την απάντηση HTTP όταν λαμβάνετε ένα αίτημα για πρόσβαση στα αρχεία που θέλετε να ανεβάσετε.

Λάβετε προφυλάξεις για τρωτά σημεία μεταφόρτωσης αρχείων

Οποιαδήποτε μεταφόρτωση αρχείου που μπορούν να κάνουν οι χρήστες σε έναν ιστότοπο είναι επικίνδυνη, επομένως αυτό είναι ένα από τα ζητήματα στα οποία οι προγραμματιστές πρέπει να δώσουν τη μεγαλύτερη προσοχή. Εάν οι εισβολείς ανακαλύψουν μια τέτοια ευπάθεια, μπορούν να ανοίξουν ένα κέλυφος εντός του ιστότοπου και να εκμεταλλευτούν εύκολα τις πληροφορίες στον διακομιστή. Είναι ζωτικής σημασίας να ελέγχετε όλα τα αρχεία που ανεβαίνουν οι χρήστες, να εφαρμόζετε μεθόδους της λίστας επιτρεπόμενων και να αποκρύπτετε τη θέση του καταλόγου που έχει μεταφορτωθεί, εάν είναι δυνατόν.

Και φυσικά, υπάρχουν πολλά άλλα πρόσθετα βήματα που πρέπει να κάνετε για να προστατεύσετε τον ιστότοπό σας, ακόμα κι αν λάβετε όλες τις συνιστώμενες προφυλάξεις για τη μεταφόρτωση ενοτήτων αρχείων. Η χρήση κεφαλίδων ασφαλείας HTTP είναι ένα τέτοιο βήμα που μπορείτε να κάνετε.