Μία από τις πιο κοινές κατηγορίες ευπάθειας σε ιστότοπους ονομάζεται "Σενάριο διασταυρώσεων" ή "XSS". Τα τρωτά σημεία XSS είναι εκεί όπου είναι δυνατό για έναν χρήστη να προκαλέσει την εκτέλεση JavaScript. Υπάρχει ένας αριθμός διαφορετικών παραλλαγών ευπάθειας XSS, με διάφορους βαθμούς σοβαρότητας.
Το πρόβλημα με έναν εισβολέα που μπορεί να εκτελέσει JavaScript στις περιόδους σύνδεσης άλλων χρηστών είναι ότι στη συνέχεια είναι δυνατό για τον εισβολέα να κάνει οτιδήποτε στον ιστότοπο που βλέπουν τα θύματα. Αυτό περιλαμβάνει την ανακατεύθυνση των θυμάτων σε εξωτερικούς ιστότοπους, την κλοπή κουπονιών ελέγχου ταυτότητας και την παρακολούθηση των λεπτομερειών πληρωμής.
Η πιο σοβαρή μορφή ευπάθειας XSS είναι η "Αποθηκευμένη" ή η "Μόνιμη" δέσμη ενεργειών μεταξύ τοποθεσιών, εδώ είναι δυνατό για έναν εισβολέα να δημιουργήσει ένα ωφέλιμο φορτίο XSS και στη συνέχεια να το υποβάλει, ώστε να αποθηκευτεί στη βάση δεδομένων. Με ένα XSS exploit που είναι αποθηκευμένο στη βάση δεδομένων, είναι δυνατό να επηρεάσει άλλους χρήστες για μια ευρεία χρονική περίοδο.
Μια άλλη μορφή δέσμης ενεργειών μεταξύ τοποθεσιών είναι το "Reflected", αυτός ο τύπος δεν αποθηκεύεται σε κανένα σημείο, αντίθετα, το ωφέλιμο φορτίο περιλαμβάνεται στο πρόγραμμα περιήγησης. Συνήθως, αυτός ο τύπος XSS αποτελεί μέρος επιθέσεων phishing, όπου ένας εισβολέας προσπαθεί να ξεγελάσει ένα θύμα για να κάνει κλικ σε έναν κακόβουλο σύνδεσμο.
Γενικά, οι περισσότερες επιθέσεις XSS έχουν το ωφέλιμο φορτίο που αποστέλλεται στον διακομιστή κάποια στιγμή, αλλά ορισμένες επιθέσεις είναι καθαρά από την πλευρά του πελάτη, δεν αποστέλλονται ποτέ στον διακομιστή και αντίθετα επηρεάζουν μόνο την JavaScript από την πλευρά του πελάτη. Αυτό ονομάζεται XSS που βασίζεται σε DOM καθώς παραμένει στο μοντέλο αντικειμένου εγγράφου JavaScript ή DOM. Αυτός ο τύπος ευπάθειας είναι ιδιαίτερα δύσκολο να εντοπιστεί και να επιλυθεί, επειδή τα exploit δεν φαίνονται ποτέ από τον διακομιστή και επομένως δεν μπορούν να καταγραφούν.
Ιστορικά, η τεχνική πρόληψης κατά των τρωτών σημείων XSS είναι να φιλτράρει όλα τα δεδομένα που υποβάλλονται από τον χρήστη, χρησιμοποιώντας λίστες αποκλεισμού για την απόρριψη οποιωνδήποτε μηνυμάτων με σημαντικούς χαρακτήρες ή λέξεις στο JavaScript. Αυτό έτεινε να οδηγήσει σε μια κούρσα εξοπλισμών για την εύρεση παρακαμπτηρίων για το φίλτρο, αποτρέποντας επίσης ορισμένες νόμιμες υποβολές χρηστών. Η σωστή λύση είναι να χρησιμοποιήσετε οντότητες HTML για την κωδικοποίηση δεδομένων που υποβάλλονται από τον χρήστη. με τις λειτουργικές μονάδες οντοτήτων HTML ενεργοποιημένες, οι χαρακτήρες κωδικοποιούνται αυτόματα σε μια μορφή όπου το πρόγραμμα περιήγησης ξέρει να τους εμφανίζει ως τα σωστά σύμβολα αλλά όχι να τους αντιμετωπίζει ως κώδικα.