Αποτροπή δέσμης ενεργειών μεταξύ τοποθεσιών (XSS) στην Spring Boot με Πολιτικές Ασφάλειας Περιεχομένου (CSP)

Εισαγωγή

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

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

Σε αυτόν τον σύντομο οδηγό, θα ρίξουμε μια ματιά στο τι είναι το Cross-Site Scripting (XSS), πώς θα μπορούσε κάποιος να εκτελέσει αυτήν την επίθεση στη δική σας εφαρμογή και πώς μπορείτε να την αποτρέψετε εύκολα με το Spring Boot.

Τι είναι το Cross-Site Scripting (XSS);

Το Cross-Site Scripting είναι ένα πολύ γνωστό, ευρέως διαδεδομένο exploit, στο οποίο ένας κακός ηθοποιός εισάγει ένα σενάριο σε μια εφαρμογή Ιστού.

Συνήθως, μια πολιτική ίδιας προέλευσης εφαρμόζεται σε εφαρμογές Ιστού, η οποία περιορίζει τα σενάρια σε μια ιστοσελίδα στην πρόσβαση σε δεδομένα από πηγές, εάν η προέλευσή τους δεν ταιριάζει. Σύμφωνα με την πολιτική ίδιας προέλευσης – εάν μια σελίδα από α αξιόπιστη ιστοσελίδα μπορεί να έχει πρόσβαση σε δεδομένα διασύνδεσης με τον χρήστη (όπως cookies, για παράδειγμα), και άλλες σελίδες από την ίδια προέλευση ενδέχεται να το κάνουν επίσης. Αυτή η μορφή ελέγχου πρόσβασης φαινόταν επαρκής για την προστασία της ακεραιότητας των δεδομένων σε εφαρμογές Ιστού εκείνη την εποχή.

Η δέσμη ενεργειών μεταξύ τοποθεσιών παρακάμπτει την πολιτική ίδιας προέλευσης, εισάγοντας ένα κακόβουλο σενάριο στη σελίδα ενός αξιόπιστου ιστότοπου. Εφόσον το σενάριο εκτελείται από έναν αξιόπιστο ιστότοπο, εκτελείται ως αξιόπιστο σενάριο. Δεν υπήρχε ξεκάθαρος τρόπος για να γίνει διάκριση μεταξύ κακόβουλων σεναρίων και μη κακόβουλων σεναρίων – επομένως η αυθαίρετη εκτέλεση κώδικα ήταν δυνατή με το Cross-Site Scripting. Αυτό κυμαίνεται από την εισαγωγή ενοχλητικών ειδοποιήσεων, έως τις επιθέσεις κοινωνικής μηχανικής, τη σιωπηρή συλλογή πληροφοριών χρήστη ή την ανακατεύθυνση των χρηστών σε σελίδες ηλεκτρονικού ψαρέματος που φαίνεται να αποτελούν μέρη αξιόπιστων ιστότοπων.

Πολλές οι ιστότοποι είναι επιρρεπείς σε επιθέσεις Cross-Site Scripting και παραμένει μια συνηθισμένη επίθεση σήμερα, παρόλο που αυτός ο τύπος εκμετάλλευσης είναι γνωστός από τη δεκαετία του '90.

Αποτροπή XSS σε εφαρμογή Spring Boot με Πολιτική Ασφάλειας Περιεχομένου (CSP)

Το Spring Boot λαμβάνει σοβαρά υπόψη την ασφάλεια και η ενότητα Spring's Security εφαρμόζει ευέλικτες και ισχυρές πρακτικές ασφαλείας που επιτρέπουν στους προγραμματιστές να ελαχιστοποιούν την ανησυχία τους όσον αφορά την ασφάλεια, κάτι που συχνά απαιτεί χαμηλό επίπεδο κατανόησης των αρχών του τρόπου με τον οποίο ανταλλάσσονται τα μηνύματα στον ιστό εφαρμογή.

Από προεπιλογή, το Spring Boot εφαρμόζει πολλές κεφαλίδες ασφαλείας:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Το X-XSS-Protection περιλαμβάνεται από προεπιλογή! Αυτή η κεφαλίδα ασφαλείας επιχειρεί να ανίχνευση Το XSS επιχειρεί και τα μπλοκάρει. Ωστόσο, αυτή δεν είναι μια διαδικασία αστοχίας και τα προγράμματα περιήγησης έχουν διαφορετικές υλοποιήσεις ανιχνευτών. Ορισμένα προγράμματα περιήγησης, όπως το Chrome, έχουν ακόμη αφαίρεσαν το XSS Auditor τους. Επιπλέον, η αυτοματοποιημένη ανίχνευση λειτουργεί για Αντικατοπτρίζονται επιθέσεις XSS, ενώ υπάρχουν και άλλα είδη επιθέσεων.

Μια πιο σύγχρονη εναλλακτική στο X-XSS-Protection είναι το Περιεχόμενο-Πολιτική Ασφάλειας (CSP), οι οποίες ασχολούνται κυρίως με πολιτικές σχετικά με τις οποίες μπορούν να φορτωθούν πόροι, από ποιες προελεύσεις και σε ποια τελικά σημεία. Από το 2022, το CSP είναι το καλύτερο μέτρο πρόληψης κατά των επιθέσεων XSS, Clickjacking και άλλων τύπων. Δεν εφαρμόζουν όλα τα προγράμματα περιήγησης CSP, γι' αυτό και δεν περιλαμβάνεται στις κεφαλίδες ασφαλείας από προεπιλογή.

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

Στην Spring Boot – για να διαμορφώσετε προσαρμοσμένα μέτρα ασφαλείας ιστού, συνήθως επεκτείνετε το WebSecurityConfigurerAdapter κλάση και παρακάμπτετε το configure() μέθοδος:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

Όπου οι οδηγίες για την πολιτική ασφάλειας περιεχομένου (παρέχονται ως α ;-διαχωρισμένη συμβολοσειρά) εξαρτώνται από την περίπτωση χρήσης σας και ποιες πηγές θέλετε να εμπιστευτείτε:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

Για παράδειγμα, μια εφαρμογή Ιστού μπορεί να παραθέσει αξιόπιστους ιστότοπους από τους οποίους μπορούν να φορτωθούν σενάρια με:

script-src https://trusted.com;

Ή μπορείτε να παραλείψετε την εμπιστοσύνη οποιουδήποτε ιστότοπου τρίτου μέρους:

script-src self;

Ομοίως, μια εφαρμογή μπορεί να εμπιστευτεί τις προσθήκες:

object-src https://trusted.com

Υπάρχει μια μεγάλη ποικιλία οδηγιών που μπορείτε να παρέχετε, όπως:

  • default-src – Προεπιλεγμένη εναλλακτική
  • child-src – Έγκυρες πηγές web worker
  • frame-src – Έγκυρες πηγές για s και s
  • img-src – Έγκυρες πηγές για εικόνες
  • media-src – Έγκυρες πηγές για , και ετικέτες
  • script-src – Έγκυρες πηγές σεναρίων (βοηθά στην αποτροπή XSS)
  • style-src – Έγκυρες πηγές για στοιχεία
  • base-uri – Περιορίζει τους πόρους που είναι προσβάσιμοι από το στοιχείο
  • frame-ancestors – Έγκυρες γονείς του , , , κλπ στοιχεία
  • και ούτω καθεξής

Ρίξτε μια ματιά στον πρακτικό μας οδηγό για την εκμάθηση του Git, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

Για παράδειγμα, εδώ είναι ένα ασφαλές σύνολο οδηγιών πολιτικής:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

Ας τα προσθέσουμε στην εφαρμογή Spring Boot:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

Μπορείτε να χρησιμοποιήσετε το CSP-Evaluator για να αξιολογήσετε εάν οι οδηγίες CSP σας είναι έγκυρες και ασφαλές και θα επισημάνει ποιες οδηγίες είναι εύκολα εκμεταλλεύσιμες. Ακολουθεί μια οδηγία CSP που επιτρέπει τα API της Google:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

Συμπέρασμα

Σε αυτόν τον σύντομο οδηγό, ρίξαμε μια ματιά στο τι είναι το Cross-Site Scripting (XSS) και πώς λειτουργεί σε ολιστικό επίπεδο. Στη συνέχεια, εξερευνήσαμε ορισμένα μέτρα πρόληψης XSS που μπορούν εύκολα να εφαρμοστούν με το Spring Boot για να κάνουμε τις εφαρμογές σας ασφαλείς και ορίσαμε Περιεχόμενο-Πολιτική Ασφάλειας (CSP).

Τέλος, διερευνήσαμε τις οδηγίες CSP και ρίξαμε μια ματιά σε μερικές διαφορετικές ασφαλείς πολιτικές.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse