Οι κεφαλίδες ασφαλείας είναι ένα υποσύνολο της κεφαλίδας απόκρισης HTTP που μπορεί να οριστεί από έναν διακομιστή ιστού που εφαρμόζει ο καθένας ένα στοιχείο ελέγχου ασφαλείας στα προγράμματα περιήγησης. Οι κεφαλίδες HTTP είναι μια μορφή μεταδεδομένων που αποστέλλονται με αιτήματα και απαντήσεις ιστού. Η κεφαλίδα ασφαλείας "X-Content-Type-Options" εμποδίζει τα προγράμματα περιήγησης να εκτελούν MIME sniffing.
Σημείωση: Οι κεφαλίδες HTTP δεν είναι αποκλειστικές για το HTTP και χρησιμοποιούνται επίσης σε HTTPS.
Τι είναι το MIME sniffing;
Όταν αποστέλλονται δεδομένα μέσω του ιστού, ένα από τα μεταδεδομένα που περιλαμβάνονται είναι τύπου MIME. Οι επεκτάσεις αλληλογραφίας πολλαπλών χρήσεων Internet ή οι τύποι MIME είναι ένα πρότυπο που χρησιμοποιείται για τον καθορισμό του τύπου των δεδομένων που περιέχει ένα αρχείο, το οποίο υποδεικνύει τον τρόπο χειρισμού του αρχείου. Συνήθως, ο τύπος MIME αποτελείται από έναν τύπο και έναν υποτύπο με μια προαιρετική παράμετρο και τιμή. Για παράδειγμα, ένα αρχείο κειμένου UTF-8 θα έχει τον τύπο MIME "text/plain; σύνολο χαρακτήρων=UTF-8”. Σε αυτό το παράδειγμα, ο τύπος είναι "text", ο δευτερεύων τύπος είναι "plain", η παράμετρος είναι "charset" και η τιμή είναι "UTF-8".
Για να αποφευχθεί η εσφαλμένη επισήμανση και ο λάθος χειρισμός των αρχείων, οι διακομιστές ιστού συνήθως εκτελούν MIME sniffing. Αυτή είναι μια διαδικασία όπου ο ρητά αναφερόμενος τύπος MIME αγνοείται και, αντί αυτού, αναλύεται η έναρξη του αρχείου. Οι περισσότεροι τύποι αρχείων περιλαμβάνουν ακολουθίες κεφαλίδων που υποδεικνύουν τι τύπο αρχείου είναι. Τις περισσότερες φορές, οι τύποι MIME είναι σωστοί και το sniffing του αρχείου δεν έχει καμία διαφορά. Εάν υπάρχει διαφορά, ωστόσο, οι διακομιστές ιστού θα χρησιμοποιήσουν τον τύπο αρχείου sniffed για να καθορίσουν τον τρόπο χειρισμού του αρχείου και όχι τον δηλωμένο τύπο MIME.
Το πρόβλημα παρουσιάζεται εάν ένας εισβολέας καταφέρει να ανεβάσει ένα αρχείο όπως μια εικόνα PNG, αλλά το αρχείο είναι στην πραγματικότητα κάτι άλλο σαν κώδικας JavaScript. Για παρόμοιους τύπους αρχείων, όπως δύο τύπους κειμένου, αυτό ενδέχεται να μην προκαλεί υπερβολικό πρόβλημα. Γίνεται σοβαρό ζήτημα, ωστόσο, εάν μπορεί να εκτελεστεί ένα εντελώς αβλαβές αρχείο.
Τι κάνει το X-Content-Type-Options;
Η κεφαλίδα X-Content-Type-Options έχει μόνο μία πιθανή τιμή "X-Content-Type-Options: nosniff". Η ενεργοποίησή του ενημερώνει το πρόγραμμα περιήγησης του χρήστη ότι δεν πρέπει να εκτελεί sniffing τύπου MIME και αντ' αυτού να βασίζεται στη ρητά δηλωμένη τιμή. Χωρίς αυτήν τη ρύθμιση, εάν ένα κακόβουλο αρχείο JavaScript είχε μεταμφιεστεί ως εικόνα όπως ένα PNG, τότε το αρχείο JavaScript θα εκτελούνταν. Με ενεργοποιημένες το X-Content-Type-Options, το αρχείο θα αντιμετωπίζεται ως εικόνα που αποτυγχάνει να φορτώσει, καθώς το αρχείο δεν είναι έγκυρη μορφή εικόνας.
Το X-Content-Type-Options δεν είναι ιδιαίτερα απαραίτητο σε έναν ιστότοπο που χρησιμοποιεί εξ ολοκλήρου πόρους πρώτου κατασκευαστή, καθώς δεν υπάρχει πιθανότητα να προβληθεί κατά λάθος ένα κακόβουλο αρχείο. Εάν ένας ιστότοπος χρησιμοποιεί περιεχόμενο τρίτων, όπως εξωτερικούς πόρους ή πόρους που υποβάλλονται από τον χρήστη, τότε το X-Content-Type-Options παρέχει προστασία έναντι αυτού του τύπου επίθεσης.