Angular
The Checklist
Checklist from here.
What is Angular
Το Angular είναι ένα ισχυρό και ανοιχτού κώδικα πλαίσιο front-end που διατηρείται από την Google. Χρησιμοποιεί TypeScript για να ενισχύσει την αναγνωσιμότητα του κώδικα και την αποσφαλμάτωση. Με ισχυρούς μηχανισμούς ασφαλείας, το Angular αποτρέπει κοινές ευπάθειες από την πλευρά του πελάτη όπως XSS και ανοιχτές ανακατευθύνσεις. Μπορεί να χρησιμοποιηθεί και από την πλευρά του διακομιστή, καθιστώντας τις παρατηρήσεις ασφαλείας σημαντικές από και τις δύο πλευρές.
Framework architecture
Για να κατανοήσουμε καλύτερα τα βασικά του Angular, ας περάσουμε από τις βασικές του έννοιες.
Ένα κοινό έργο Angular συνήθως φαίνεται έτσι:
Σύμφωνα με την τεκμηρίωση, κάθε εφαρμογή Angular έχει τουλάχιστον ένα συστατικό, το ριζικό συστατικό (AppComponent
) που συνδέει μια ιεραρχία συστατικών με το DOM. Κάθε συστατικό ορίζει μια κλάση που περιέχει δεδομένα και λογική της εφαρμογής, και σχετίζεται με ένα HTML πρότυπο που ορίζει μια προβολή που θα εμφανίζεται σε ένα στοχευμένο περιβάλλον. Ο διακοσμητής @Component()
προσδιορίζει την κλάση αμέσως από κάτω του ως συστατικό και παρέχει το πρότυπο και σχετικές μεταδεδομένες πληροφορίες που είναι συγκεκριμένες για το συστατικό. Το AppComponent
ορίζεται στο αρχείο app.component.ts
.
Τα Angular NgModules δηλώνουν ένα πλαίσιο μεταγλώττισης για ένα σύνολο συστατικών που είναι αφιερωμένο σε έναν τομέα εφαρμογής, μια ροή εργασίας ή ένα στενά σχετιζόμενο σύνολο δυνατοτήτων. Κάθε εφαρμογή Angular έχει ένα ριζικό module, που ονομάζεται συμβατικά AppModule
, το οποίο παρέχει τον μηχανισμό εκκίνησης που εκκινεί την εφαρμογή. Μια εφαρμογή συνήθως περιέχει πολλά λειτουργικά modules. Το AppModule
ορίζεται στο αρχείο app.module.ts
.
Το Angular Router
NgModule παρέχει μια υπηρεσία που σας επιτρέπει να ορίσετε μια διαδρομή πλοήγησης μεταξύ των διαφορετικών καταστάσεων εφαρμογής και ιεραρχιών προβολής στην εφαρμογή σας. Το RouterModule
ορίζεται στο αρχείο app-routing.module.ts
.
Για δεδομένα ή λογική που δεν σχετίζεται με μια συγκεκριμένη προβολή και θέλετε να μοιραστείτε μεταξύ των συστατικών, δημιουργείτε μια κλάση υπηρεσίας. Ο ορισμός μιας κλάσης υπηρεσίας προηγείται αμέσως από τον διακοσμητή @Injectable()
. Ο διακοσμητής παρέχει τα μεταδεδομένα που επιτρέπουν σε άλλους παρόχους να εισάγονται ως εξαρτήσεις στην κλάση σας. Η εξάρτηση εισαγωγής (DI) σας επιτρέπει να διατηρείτε τις κλάσεις συστατικών σας λιτές και αποδοτικές. Δεν ανακτούν δεδομένα από τον διακομιστή, δεν επικυρώνουν την είσοδο του χρήστη, ούτε καταγράφουν απευθείας στην κονσόλα; αναθέτουν τέτοιες εργασίες σε υπηρεσίες.
Ρύθμιση sourcemap
Το πλαίσιο Angular μεταφράζει αρχεία TypeScript σε κώδικα JavaScript ακολουθώντας τις επιλογές του tsconfig.json
και στη συνέχεια κατασκευάζει ένα έργο με τη ρύθμιση του angular.json
. Κοιτάζοντας το αρχείο angular.json
, παρατηρήσαμε μια επιλογή για να ενεργοποιήσουμε ή να απενεργοποιήσουμε ένα sourcemap. Σύμφωνα με την τεκμηρίωση του Angular, η προεπιλεγμένη ρύθμιση έχει ένα αρχείο sourcemap ενεργοποιημένο για τα σενάρια και δεν είναι κρυφό από προεπιλογή:
Γενικά, τα αρχεία sourcemap χρησιμοποιούνται για σκοπούς αποσφαλμάτωσης καθώς αντιστοιχούν στα παραγόμενα αρχεία με τα αρχικά τους αρχεία. Επομένως, δεν συνιστάται η χρήση τους σε περιβάλλον παραγωγής. Εάν τα sourcemaps είναι ενεργοποιημένα, βελτιώνουν την αναγνωσιμότητα και βοηθούν στην ανάλυση αρχείων αναπαράγοντας την αρχική κατάσταση του έργου Angular. Ωστόσο, εάν είναι απενεργοποιημένα, ένας αναθεωρητής μπορεί να αναλύσει χειροκίνητα ένα συμπιεσμένο αρχείο JavaScript αναζητώντας αντιασφαλιστικά μοτίβα.
Επιπλέον, ένα συμπιεσμένο αρχείο JavaScript με ένα έργο Angular μπορεί να βρεθεί στα εργαλεία προγραμματιστή του προγράμματος περιήγησης → Πηγές (ή Αποσφαλμάτωσης και Πηγές) → [id].main.js. Ανάλογα με τις ενεργοποιημένες επιλογές, αυτό το αρχείο μπορεί να περιέχει την παρακάτω γραμμή στο τέλος //# sourceMappingURL=[id].main.js.map
ή μπορεί να μην περιέχει, εάν η κρυφή επιλογή είναι ρυθμισμένη σε true. Παρ' όλα αυτά, εάν το sourcemap είναι απενεργοποιημένο για scripts, η δοκιμή γίνεται πιο περίπλοκη και δεν μπορούμε να αποκτήσουμε το αρχείο. Επιπλέον, το sourcemap μπορεί να ενεργοποιηθεί κατά τη διάρκεια της κατασκευής του έργου όπως ng build --source-map
.
Δεσμεύσεις δεδομένων
Η δέσμευση αναφέρεται στη διαδικασία επικοινωνίας μεταξύ ενός συστατικού και της αντίστοιχης προβολής του. Χρησιμοποιείται για τη μεταφορά δεδομένων προς και από το πλαίσιο Angular. Τα δεδομένα μπορούν να περαστούν με διάφορους τρόπους, όπως μέσω γεγονότων, παρεμβολής, ιδιοτήτων ή μέσω του μηχανισμού δέσμευσης δύο κατευθύνσεων. Επιπλέον, τα δεδομένα μπορούν επίσης να μοιραστούν μεταξύ σχετικών συστατικών (σχέση γονέα-παιδιού) και μεταξύ δύο άσχετων συστατικών χρησιμοποιώντας τη δυνατότητα Υπηρεσίας.
Μπορούμε να ταξινομήσουμε τη δέσμευση με βάση τη ροή δεδομένων:
Πηγή δεδομένων προς στόχο προβολής (περιλαμβάνει παρεμβολή, ιδιότητες, ατομικά χαρακτηριστικά, κλάσεις και στυλ); μπορεί να εφαρμοστεί χρησιμοποιώντας
[]
ή{{}}
στο πρότυπο;Στόχος προβολής προς πηγή δεδομένων (περιλαμβάνει γεγονότα); μπορεί να εφαρμοστεί χρησιμοποιώντας
()
στο πρότυπο;Δύο κατευθύνσεων; μπορεί να εφαρμοστεί χρησιμοποιώντας
[()]
στο πρότυπο.
Η δέσμευση μπορεί να κληθεί σε ιδιότητες, γεγονότα και ατομικά χαρακτηριστικά, καθώς και σε οποιοδήποτε δημόσιο μέλος μιας πηγής οδηγίας:
Ιδιότητα
Ιδιότητα στοιχείου, Ιδιότητα συστατικού, Ιδιότητα οδηγίας
<img [alt]="hero.name" [src]="heroImageUrl">
Γεγονός
Γεγονός στοιχείου, Γεγονός συστατικού, Γεγονός οδηγίας
<button type="button" (click)="onSave()">Αποθήκευση
Δύο κατευθύνσεων
Γεγονός και ιδιότητα
<input [(ngModel)]="name">
Ατομικό χαρακτηριστικό
Ατομικό χαρακτηριστικό (η εξαίρεση)
<button type="button" [attr.aria-label]="help">βοήθεια
Κλάση
Ιδιότητα κλάσης
<div [class.special]="isSpecial">Ειδικό
Στυλ
Ιδιότητα στυλ
<button type="button" [style.color]="isSpecial ? 'red' : 'green'">
Μοντέλο ασφάλειας Angular
Ο σχεδιασμός του Angular περιλαμβάνει την κωδικοποίηση ή την απολύμανση όλων των δεδομένων από προεπιλογή, καθιστώντας όλο και πιο δύσκολο να ανακαλυφθούν και να εκμεταλλευτούν οι ευπάθειες XSS σε έργα Angular. Υπάρχουν δύο διακριτές περιπτώσεις για τη διαχείριση δεδομένων:
Παρεμβολή ή
{{user_input}}
- εκτελεί κωδικοποίηση ευαίσθητη στο πλαίσιο και ερμηνεύει την είσοδο του χρήστη ως κείμενο;
Αποτέλεσμα: <script>alert(1)</script><h1>test</h1>
2. Δέσμευση σε ιδιότητες, ατομικά χαρακτηριστικά, κλάσεις και στυλ ή [attribute]="user_input"
- εκτελεί απολύμανση με βάση το παρεχόμενο πλαίσιο ασφάλειας.
Αποτέλεσμα: <div><h1>test</h1></div>
Υπάρχουν 6 τύποι SecurityContext
:
None
;HTML
χρησιμοποιείται, όταν ερμηνεύεται η τιμή ως HTML;STYLE
χρησιμοποιείται, όταν δέσμευσης CSS στην ιδιότηταstyle
;URL
χρησιμοποιείται για ιδιότητες URL, όπως<a href>
;SCRIPT
χρησιμοποιείται για κώδικα JavaScript;RESOURCE_URL
ως URL που φορτώνεται και εκτελείται ως κώδικας, για παράδειγμα, στο<script src>
.
Ευπάθειες
Παράκαμψη μεθόδων εμπιστοσύνης ασφάλειας
Ο Angular εισάγει μια λίστα μεθόδων για να παρακάμψει τη διαδικασία προεπιλεγμένης απολύμανσης και να υποδείξει ότι μια τιμή μπορεί να χρησιμοποιηθεί με ασφάλεια σε ένα συγκεκριμένο πλαίσιο, όπως στα παρακάτω πέντε παραδείγματα:
bypassSecurityTrustUrl
χρησιμοποιείται για να υποδείξει ότι η δεδομένη τιμή είναι μια ασφαλής διεύθυνση URL στυλ:
bypassSecurityTrustResourceUrl
χρησιμοποιείται για να υποδείξει ότι η δεδομένη τιμή είναι μια ασφαλής διεύθυνση URL πόρου:
bypassSecurityTrustHtml
χρησιμοποιείται για να υποδείξει ότι η δεδομένη τιμή είναι ασφαλές HTML. Σημειώστε ότι η εισαγωγή στοιχείωνscript
στο δέντρο DOM με αυτόν τον τρόπο δεν θα προκαλέσει την εκτέλεση του περιεχόμενου JavaScript κώδικα, λόγω του τρόπου που προστίθενται αυτά τα στοιχεία στο δέντρο DOM.
bypassSecurityTrustScript
χρησιμοποιείται για να υποδείξει ότι η δεδομένη τιμή είναι ασφαλής JavaScript. Ωστόσο, βρήκαμε ότι η συμπεριφορά της είναι απρόβλεπτη, επειδή δεν μπορέσαμε να εκτελέσουμε κώδικα JS σε πρότυπα χρησιμοποιώντας αυτή τη μέθοδο.
bypassSecurityTrustStyle
χρησιμοποιείται για να υποδείξει ότι η δεδομένη τιμή είναι ασφαλής CSS. Το παρακάτω παράδειγμα απεικονίζει την εισαγωγή CSS:
Ο Angular παρέχει μια μέθοδο sanitize
για να απολυμαίνει δεδομένα πριν τα εμφανίσει σε προβολές. Αυτή η μέθοδος χρησιμοποιεί το παρεχόμενο πλαίσιο ασφάλειας και καθαρίζει την είσοδο αναλόγως. Είναι, ωστόσο, κρίσιμο να χρησιμοποιείται το σωστό πλαίσιο ασφάλειας για τα συγκεκριμένα δεδομένα και το πλαίσιο. Για παράδειγμα, η εφαρμογή ενός απολυμαντή με SecurityContext.URL
σε περιεχόμενο HTML δεν παρέχει προστασία από επικίνδυνες τιμές HTML. Σε τέτοιες περιπτώσεις, η κακή χρήση του πλαισίου ασφάλειας θα μπορούσε να οδηγήσει σε ευπάθειες XSS.
Εισαγωγή HTML
Αυτή η ευπάθεια συμβαίνει όταν η είσοδος του χρήστη δεσμεύεται σε οποιαδήποτε από τις τρεις ιδιότητες: innerHTML
, outerHTML
, ή iframe
srcdoc
. Ενώ η δέσμευση σε αυτά τα χαρακτηριστικά ερμηνεύει το HTML όπως είναι, η είσοδος απολυμαίνεται χρησιμοποιώντας SecurityContext.HTML
. Έτσι, είναι δυνατή η εισαγωγή HTML, αλλά η διασταυρούμενη σκριπτογράφηση (XSS) δεν είναι.
Παράδειγμα χρήσης innerHTML
:
Το αποτέλεσμα είναι <div><h1>test</h1></div>
.
Εισαγωγή προτύπων
Απόδοση πελάτη (CSR)
Το Angular εκμεταλλεύεται τα πρότυπα για να κατασκευάσει σελίδες δυναμικά. Η προσέγγιση περιλαμβάνει την περιτύλιξη εκφράσεων προτύπου που πρέπει να αξιολογηθούν από το Angular μέσα σε διπλές αγκύλες ({{}}
). Με αυτόν τον τρόπο, το πλαίσιο προσφέρει επιπλέον λειτουργικότητα. Για παράδειγμα, ένα πρότυπο όπως {{1+1}}
θα εμφανίζεται ως 2.
Συνήθως, το Angular διαφεύγει την είσοδο του χρήστη που μπορεί να συγχέεται με εκφράσεις προτύπου (π.χ., χαρακτήρες όπως `< > ' " ``). Αυτό σημαίνει ότι απαιτούνται επιπλέον βήματα για να παρακαμφθεί αυτός ο περιορισμός, όπως η χρήση συναρτήσεων που δημιουργούν αντικείμενα συμβολοσειρών JavaScript για να αποφευχθεί η χρήση αποκλεισμένων χαρακτήρων. Ωστόσο, για να το επιτύχουμε αυτό, πρέπει να λάβουμε υπόψη το πλαίσιο του Angular, τις ιδιότητές του και τις μεταβλητές. Επομένως, μια επίθεση εισαγωγής προτύπου μπορεί να φαίνεται ως εξής:
Όπως φαίνεται παραπάνω: constructor
αναφέρεται στο πεδίο της ιδιότητας Object constructor
, επιτρέποντάς μας να καλέσουμε τον κατασκευαστή String και να εκτελέσουμε αυθαίρετο κώδικα.
Server-Side Rendering (SSR)
Σε αντίθεση με το CSR, το οποίο συμβαίνει στο DOM του προγράμματος περιήγησης, το Angular Universal είναι υπεύθυνο για το SSR των αρχείων προτύπων. Αυτά τα αρχεία παραδίδονται στη συνέχεια στον χρήστη. Παρά αυτή τη διάκριση, το Angular Universal εφαρμόζει τους ίδιους μηχανισμούς απολύμανσης που χρησιμοποιούνται στο CSR για να ενισχύσει την ασφάλεια του SSR. Μια ευπάθεια εισαγωγής προτύπου στο SSR μπορεί να εντοπιστεί με τον ίδιο τρόπο όπως στο CSR, επειδή η χρησιμοποιούμενη γλώσσα προτύπων είναι η ίδια.
Φυσικά, υπάρχει επίσης η δυνατότητα εισαγωγής νέων ευπαθειών εισαγωγής προτύπων όταν χρησιμοποιούνται τρίτες μηχανές προτύπων όπως το Pug και το Handlebars.
XSS
DOM interfaces
Όπως αναφέρθηκε προηγουμένως, μπορούμε να έχουμε άμεση πρόσβαση στο DOM χρησιμοποιώντας τη διεπαφή Document. Εάν η είσοδος του χρήστη δεν επικυρωθεί εκ των προτέρων, μπορεί να οδηγήσει σε ευπάθειες cross-site scripting (XSS).
Χρησιμοποιήσαμε τις μεθόδους document.write()
και document.createElement()
στα παραδείγματα παρακάτω:
Angular classes
Υπάρχουν μερικές κλάσεις που μπορούν να χρησιμοποιηθούν για εργασία με στοιχεία DOM στο Angular: ElementRef
, Renderer2
, Location
και Document
. Μια λεπτομερής περιγραφή των τελευταίων δύο κλάσεων παρέχεται στην ενότητα Open redirects. Η κύρια διαφορά μεταξύ των πρώτων δύο είναι ότι το API Renderer2
παρέχει μια στρώση αφαίρεσης μεταξύ του στοιχείου DOM και του κώδικα του συστατικού, ενώ το ElementRef
απλώς κρατά μια αναφορά στο στοιχείο. Επομένως, σύμφωνα με την τεκμηρίωση του Angular, το API ElementRef
θα πρέπει να χρησιμοποιείται μόνο ως έσχατη λύση όταν απαιτείται άμεση πρόσβαση στο DOM.
Το
ElementRef
περιέχει την ιδιότηταnativeElement
, η οποία μπορεί να χρησιμοποιηθεί για να χειριστεί τα στοιχεία DOM. Ωστόσο, η ακατάλληλη χρήση τουnativeElement
μπορεί να έχει ως αποτέλεσμα μια ευπάθεια XSS, όπως φαίνεται παρακάτω:
Παρά το γεγονός ότι το
Renderer2
παρέχει API που μπορεί να χρησιμοποιηθεί με ασφάλεια ακόμη και όταν η άμεση πρόσβαση σε εγγενή στοιχεία δεν υποστηρίζεται, εξακολουθεί να έχει ορισμένα κενά ασφαλείας. Με τοRenderer2
, είναι δυνατό να ορίσετε χαρακτηριστικά σε ένα στοιχείο HTML χρησιμοποιώντας τη μέθοδοsetAttribute()
, η οποία δεν έχει μηχανισμούς πρόληψης XSS.
Για να ορίσετε την ιδιότητα ενός στοιχείου DOM, μπορείτε να χρησιμοποιήσετε τη μέθοδο
Renderer2.setProperty()
και να ενεργοποιήσετε μια επίθεση XSS:
Κατά τη διάρκεια της έρευνάς μας, εξετάσαμε επίσης τη συμπεριφορά άλλων μεθόδων Renderer2
, όπως setStyle()
, createComment()
, και setValue()
, σε σχέση με XSS και CSS injections. Ωστόσο, δεν μπορέσαμε να βρούμε έγκυρους επιθετικούς διαδρόμους για αυτές τις μεθόδους λόγω των λειτουργικών περιορισμών τους.
jQuery
Το jQuery είναι μια γρήγορη, μικρή και πλούσια σε χαρακτηριστικά βιβλιοθήκη JavaScript που μπορεί να χρησιμοποιηθεί στο έργο Angular για να βοηθήσει με την επεξεργασία των αντικειμένων HTML DOM. Ωστόσο, όπως είναι γνωστό, οι μέθοδοι αυτής της βιβλιοθήκης μπορεί να εκμεταλλευτούν για να επιτευχθεί μια ευπάθεια XSS. Για να συζητήσουμε πώς ορισμένες ευάλωτες μέθοδοι jQuery μπορούν να εκμεταλλευτούν σε έργα Angular, προσθέσαμε αυτή την υποενότητα.
Η μέθοδος
html()
αποκτά το HTML περιεχόμενο του πρώτου στοιχείου στο σύνολο των ταιριασμένων στοιχείων ή ορίζει το HTML περιεχόμενο κάθε ταιριασμένου στοιχείου. Ωστόσο, κατά σχεδίαση, οποιοσδήποτε κατασκευαστής ή μέθοδος jQuery που δέχεται μια HTML συμβολοσειρά μπορεί δυνητικά να εκτελέσει κώδικα. Αυτό μπορεί να συμβεί με την εισαγωγή ετικετών<script>
ή τη χρήση HTML χαρακτηριστικών που εκτελούν κώδικα όπως φαίνεται στο παράδειγμα.
Η μέθοδος
jQuery.parseHTML()
χρησιμοποιεί εγγενείς μεθόδους για να μετατρέψει τη συμβολοσειρά σε ένα σύνολο κόμβων DOM, οι οποίοι μπορούν στη συνέχεια να εισαχθούν στο έγγραφο.
Όπως αναφέρθηκε προηγουμένως, οι περισσότερες APIs jQuery που δέχονται HTML συμβολοσειρές θα εκτελούν σενάρια που περιλαμβάνονται στην HTML. Η μέθοδος jQuery.parseHTML()
δεν εκτελεί σενάρια στην αναλυθείσα HTML εκτός αν το keepScripts
είναι ρητά true
. Ωστόσο, είναι ακόμα δυνατό σε πολλές περιβάλλοντα να εκτελούνται σενάρια έμμεσα, για παράδειγμα, μέσω του χαρακτηριστικού <img onerror>
.
Open redirects
DOM interfaces
Σύμφωνα με την τεκμηρίωση W3C, τα αντικείμενα window.location
και document.location
θεωρούνται ψευδώνυμα στους σύγχρονους περιηγητές. Γι' αυτό έχουν παρόμοια υλοποίηση ορισμένων μεθόδων και ιδιοτήτων, οι οποίες μπορεί να προκαλέσουν μια ανοιχτή ανακατεύθυνση και DOM XSS με επιθέσεις σχήματος javascript://
όπως αναφέρεται παρακάτω.
window.location.href
(καιdocument.location.href
)
Ο κανονικός τρόπος για να αποκτήσετε το τρέχον αντικείμενο τοποθεσίας DOM είναι χρησιμοποιώντας το window.location
. Μπορεί επίσης να χρησιμοποιηθεί για να ανακατευθύνει τον περιηγητή σε μια νέα σελίδα. Ως αποτέλεσμα, η κατοχή ελέγχου αυτού του αντικειμένου μας επιτρέπει να εκμεταλλευτούμε μια ευπάθεια ανοιχτής ανακατεύθυνσης.
Η διαδικασία εκμετάλλευσης είναι ταυτόσημη για τα παρακάτω σενάρια.
window.location.assign()
(καιdocument.location.assign()
)
Αυτή η μέθοδος προκαλεί το παράθυρο να φορτώσει και να εμφανίσει το έγγραφο στη διεύθυνση URL που καθορίζεται. Εάν έχουμε έλεγχο σε αυτή τη μέθοδο, μπορεί να είναι μια πηγή για μια επίθεση ανοιχτής ανακατεύθυνσης.
window.location.replace()
(καιdocument.location.replace()
)
Αυτή η μέθοδος αντικαθιστά τον τρέχοντα πόρο με αυτόν στη δεδομένη διεύθυνση URL.
Αυτό διαφέρει από τη μέθοδο assign()
καθώς μετά τη χρήση του window.location.replace()
, η τρέχουσα σελίδα δεν θα αποθηκευτεί στην Ιστορία της συνεδρίας. Ωστόσο, είναι επίσης δυνατό να εκμεταλλευτούμε μια ευπάθεια ανοιχτής ανακατεύθυνσης όταν έχουμε έλεγχο σε αυτή τη μέθοδο.
window.open()
Η μέθοδος window.open()
δέχεται μια διεύθυνση URL και φορτώνει τον πόρο που προσδιορίζει σε μια νέα ή υπάρχουσα καρτέλα ή παράθυρο. Η κατοχή ελέγχου σε αυτή τη μέθοδο μπορεί επίσης να είναι μια ευκαιρία για να ενεργοποιήσουμε μια ευπάθεια XSS ή ανοιχτής ανακατεύθυνσης.
Angular classes
Σύμφωνα με την τεκμηρίωση του Angular, το Angular
Document
είναι το ίδιο με το έγγραφο DOM, που σημαίνει ότι είναι δυνατό να χρησιμοποιηθούν κοινοί διάδρομοι για το έγγραφο DOM για να εκμεταλλευτούμε ευπάθειες πελάτη στο Angular. Οι ιδιότητες και οι μέθοδοιDocument.location
μπορεί να είναι πηγές για επιτυχείς επιθέσεις ανοιχτής ανακατεύθυνσης όπως φαίνεται στο παράδειγμα:
Κατά τη διάρκεια της φάσης έρευνας, εξετάσαμε επίσης την κλάση
Location
του Angular για ευπάθειες ανοιχτής ανακατεύθυνσης, αλλά δεν βρέθηκαν έγκυροι διάδρομοι. ΤοLocation
είναι μια υπηρεσία Angular που μπορούν να χρησιμοποιήσουν οι εφαρμογές για να αλληλεπιδράσουν με την τρέχουσα διεύθυνση URL του περιηγητή. Αυτή η υπηρεσία έχει πολλές μεθόδους για να χειριστεί τη δεδομένη διεύθυνση URL -go()
,replaceState()
, καιprepareExternalUrl()
. Ωστόσο, δεν μπορούμε να τις χρησιμοποιήσουμε για ανακατεύθυνση σε εξωτερικό τομέα. Για παράδειγμα:
Αποτέλεσμα: http://localhost:4200/http://google.com/about
Η κλάση
Router
του Angular χρησιμοποιείται κυρίως για πλοήγηση εντός του ίδιου τομέα και δεν εισάγει επιπλέον ευπάθειες στην εφαρμογή:
Αποτέλεσμα: http://localhost:4200/https:
Οι παρακάτω μέθοδοι πλοηγούν επίσης εντός του πεδίου του τομέα:
References
Last updated