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

Άποψη: 5685|Απάντηση: 2

[Πηγή] ASP.NET Πυρήνας (20) Αποτρέψτε τις επιθέσεις ανοιχτής ανακατεύθυνσης

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 6/6/2023 9:55:38 μ.μ. | | | |
απαιτήσεις: Πρόσφατα διάβασα το έγγραφο ASP.NET Core της Microsoft "Αποτροπή επιθέσεων ανοιχτής ανακατεύθυνσης στο ASP.NET Core", που σημαίνει περίπουΟι προγραμματιστές θα πρέπει να δώσουν προσοχή στη διαδρομή του τοπικού ιστότοπου όταν μεταβαίνουν στη διεύθυνση επανάκλησης για να αποτρέψουν ορισμένα άτομα από το να πλαστογραφήσουν κακόβουλα τη διεύθυνση επανάκλησης για επιθέσεις phishing。 Μελετήστε τον κώδικα και προετοιμαστείτε να τον μεταφέρετε στο έργο ASP.NET MVC.

Θυμάμαι ότι ένας μεγάλος κατασκευαστής είχε αυτήν την ευπάθεια στο παρελθόν και μερικοί άνθρωποι τη χρησιμοποίησαν για να αποστραγγίσουν την κίνηση από το QQ και το WeChat, ως εξής:



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

Τι είναι η επίθεση ανοιχτής ανακατεύθυνσης;

Οι εφαρμογές Ιστού συχνά ανακατευθύνουν τους χρήστες σε σελίδες σύνδεσης όταν έχουν πρόσβαση σε πόρους που απαιτούν έλεγχο ταυτότητας. Οι ανακατευθύνσεις συνήθως περιλαμβάνουν μια παράμετρο querystring returnUrl, έτσι ώστε οι χρήστες να μπορούν να επιστρέψουν στη διεύθυνση URL που ζητήθηκε αρχικά μετά από μια επιτυχημένη σύνδεση. Μετά τον έλεγχο ταυτότητας του χρήστη, ανακατευθύνεται στη διεύθυνση URL που ζήτησε αρχικά.

Παράδειγμα επίθεσης

Ένας κακόβουλος χρήστης μπορεί να αναπτύξει μια επίθεση που έχει σχεδιαστεί για να δώσει σε έναν κακόβουλο χρήστη πρόσβαση στα διαπιστευτήρια ή σε ευαίσθητες πληροφορίες ενός χρήστη. Για να ξεκινήσει μια επίθεση, ένας κακόβουλος χρήστης θα εξαπατήσει τον χρήστη ώστε να κάνει κλικ σε έναν σύνδεσμο προς τη σελίδα προορισμού του ιστότοπού σας και να προσθέσει την τιμή querystring returnUrl σε αυτήν τη διεύθυνση URL. προκειμένου ναcontoso.comΓια παράδειγμα, η εφαρμογή βρίσκεται σεhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutΠεριέχει μια σελίδα προορισμού. Η επίθεση ακολουθεί τα εξής βήματα:

  • Ο χρήστης κάνει κλικ σε έναν κακόβουλο σύνδεσμο για ναhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Η δεύτερη διεύθυνση URL είναι "contoso1.com", αντί για "contoso.com”) 。
  • Ο χρήστης συνδέεται με επιτυχία.
  • Ο χρήστης ανακατευθύνεται στον ιστότοποhttp://contoso1.com/Account/LogOn(Ένας κακόβουλος ιστότοπος που μοιάζει ακριβώς με τον πραγματικό).
  • Ο χρήστης συνδέεται ξανά (παρέχοντας διαπιστευτήρια στον κακόβουλο ιστότοπο) και ανακατευθύνεται πίσω στον πραγματικό ιστότοπο.
  • Οι χρήστες μπορεί να πιστεύουν ότι η πρώτη τους προσπάθεια σύνδεσης απέτυχε και η δεύτερη προσπάθεια πέτυχε.Είναι πιθανό οι χρήστες να μην γνωρίζουν ακόμα ότι τα διαπιστευτήριά τους έχουν παραβιαστεί




Εκτός από τις σελίδες προορισμού, ορισμένοι ιστότοποι προσφέρουν σελίδες ανακατεύθυνσης ή τελικά σημεία. Ας υποθέσουμε ότι η εφαρμογή σας έχει μια σελίδα που περιλαμβάνει μια ανοιχτή ανακατεύθυνση, /Home/Redirect. Για παράδειγμα, ένας εισβολέας θα μπορούσε να δημιουργήσει ένα σημείο σε ένα μήνυμα ηλεκτρονικού ταχυδρομείου[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginσύνδεση. Οι τακτικοί χρήστες θα δουν ότι η διεύθυνση URL ξεκινά με το όνομα του ιστότοπού σας. Από εμπιστοσύνη, κάνουν κλικ στον σύνδεσμο. Στη συνέχεια, οι ανοιχτές ανακατευθύνσεις στέλνουν τους χρήστες σε ιστότοπους ηλεκτρονικού ψαρέματος που μοιάζουν με τους δικούς σας και οι χρήστες μπορούν να συνδεθούν σε ιστότοπους που πιστεύουν ότι είναι δικοί σας.

Αποτροπή ανοικτών επιθέσεων ανακατεύθυνσης

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

Τοπικήανακατεύθυνση

Χρησιμοποιώντας τη μέθοδο Controller helper στη βασική κλάση LocalRedirect:

Εάν έχει καθοριστεί μια μη τοπική διεύθυνση URL, η Τοπική ανακατεύθυνση δημιουργεί μια εξαίρεση. Διαφορετικά, συμπεριφέρεται το ίδιο με τη μέθοδο ανακατεύθυνσης. Οι πληροφορίες εξαίρεσης είναι οι εξής:

InvalidOperationException: The supplied URL is not local. A URL with an absolute path is considered local if it does not have a host/authority part. URLs using virtual paths ('~/') are also local.
Ο πηγαίος κώδικας έχει ως εξής:



Διαδικασία εκτέλεσης: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl και στο τέλος, το IsLocalUrl θα κληθεί να κρίνει (το UrlHelperFactory υλοποιεί τη διεπαφή IUrlHelperFactory από προεπιλογή. )。

Διεύθυνση πηγαίου κώδικα:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

IsLocalUrl

IsLocalUrl πριν από την ανακατεύθυνση, δοκιμάστε τη διεύθυνση URL χρησιμοποιώντας αυτήν τη μέθοδο:

Ο κωδικός έχει ως εξής:

Ο κωδικός δοκιμής έχει ως εξής:



Εάν σας επιτρέπεται να μεταβείτε σε άλλες τοποθεσίες ονομάτων τομέα, μπορείτε να υλοποιήσετε τη διασύνδεση IUrlHelperFactory και να τροποποιήσετε το IServiceCollection για να αντικαταστήσετε την προεπιλεγμένη κλάση υλοποίησης κατά την εκκίνηση του προγράμματος.

Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

(Τέλος)





Προηγούμενος:Το Docker δημιουργεί εικόνες πάνω από συστήματα Windows
Επόμενος:[Turn] (MSSQL) Βάση δεδομένων SQL Server int και guid για σύγκριση πρωτεύοντος κλειδιού
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 6/6/2023 9:57:12 μ.μ. |
Το ASP.NET Core (δεκαεννέα) χρησιμοποιεί το BackgroundService για την εκτέλεση εργασιών στο παρασκήνιο
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Προσαρμόστε μια απλή κρυφή μνήμη εξόδου OutputCache
https://www.itsvse.com/thread-10583-1-1.html

Το ASP.NET Core (17) ενσωματώνει την ανάλυση απόδοσης εφαρμογών MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Πυρήνας (16) Εξαρτάται από την παροχή υπηρεσιών δυναμικής καταχώρισης
https://www.itsvse.com/thread-10560-1-1.html

Το ASP.NET Core (XV) χρησιμοποιεί το HttpClient για την αποστολή αιτημάτων HTTP
https://www.itsvse.com/thread-10311-1-1.html

Το ASP.NET Core (δεκατέσσερα) βασίζεται στο captcha εικόνας SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) για να προσδιορίσετε εάν πρόκειται για αίτημα Ajax ή όχι
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (δώδεκα) front-end JS, ομαδοποίηση CSS και συμπίεση
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET δρομολόγηση τελικού σημείου Core (XI) προσθέτει ενδιάμεσο λογισμικό για την εμφάνιση όλων των υπηρεσιών DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Λεπτομερής επεξήγηση των προτεραιοτήτων διαμόρφωσης στο Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Λεπτομερής επεξήγηση του ενδιάμεσου λογισμικού Middleware του Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET λάκκο των προεπιλεγμένων παραμέτρων του Swagger UI στο Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Πυρήνας (7) Σε βάθος ανάλυση του πηγαίου κώδικα πλαισίου
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Πυρήνας (VI) Το DI λαμβάνει χειροκίνητα τη μέθοδο έγχυσης αντικειμένων
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Ο πυρήνας (πέντε) βασίζεται σε κατανεμημένες συναλλαγές της ΚΓΠ
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Επικύρωση ενοποιημένου μοντέλου ModelState φίλτρου Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Πυρήνας (iii) Δημιουργήστε δυναμικά παρουσίες χρησιμοποιώντας το ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Πυρήνας (2) Επανεκκινήστε την εφαρμογή με κωδικό
https://www.itsvse.com/thread-9480-1-1.html

Το ASP.NET Core (1) χρησιμοποιεί προσωρινή αποθήκευση Redis
https://www.itsvse.com/thread-9393-1-1.html
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 6/6/2023 10:01:21 μ.μ. |
Η μέθοδος IsLocalUrl μεταφέρεται στο πλαίσιο .NET ως εξής:

Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com