Τι είναι το CSRF;
CSRF (Cross-site request forgery), γνωστό και ως one click attack/session riding, κινεζική συντομογραφία: CSRF/XSRF. Το CSRF (Cross Site Request Forgery) είναι μια μέθοδος επίθεσης δικτύου που καταγράφηκε ως ένας από τους 20 κορυφαίους κινδύνους ασφαλείας στο Διαδίκτυο το 2007. Άλλοι κίνδυνοι ασφαλείας, όπως το SQL script injection και οι επιθέσεις cross-site domain script, έχουν γίνει γνωστοί τα τελευταία χρόνια και πολλοί ιστότοποι έχουν αμυνθεί εναντίον τους. Ωστόσο, το CSRF εξακολουθεί να είναι μια ξένη έννοια για τους περισσότερους ανθρώπους. Ακόμη και το πιο διάσημο Gmail είχε μια ευπάθεια CSRF στα τέλη του 2007, η οποία παραβιάστηκε και προκάλεσε τεράστιες απώλειες στους χρήστες του Gmail.
Τι μπορεί να κάνει το CSRF;
Μπορείτε να κατανοήσετε τις επιθέσεις CSRF ως εξής: ένας εισβολέας έχει κλέψει την ταυτότητά σας και έχει στείλει κακόβουλα αιτήματα στο όνομά σας. Το CSRF μπορεί να κάνει πράγματα όπως να στέλνει email, να στέλνει μηνύματα, να κλέβει τον λογαριασμό σας ή ακόμα και να αγοράζει αγαθά και να μεταφέρει εικονικό νόμισμα για λογαριασμό σας...... Τα προβλήματα που προκαλούνται περιλαμβάνουν: διαρροή προσωπικού απορρήτου και ασφάλεια ιδιοκτησίας.
ASP.NET Σήμα κατά της παραχάραξης MVC AntiForgeryToken
Σε ASP.NET MVC, τα διακριτικά φόρμας και τα διακριτικά cookie δημιουργούνται αυτόματα από προεπιλογή κάθε φορά που χρησιμοποιείται το @Html.AntiForgeryToken() στη σελίδα προβολής. Ωστόσο, εάν θέλουμε να επιτύχουμε χειροκίνητη ανάκτηση στο παρασκήνιο, πρέπει να χρησιμοποιήσουμε την κλάση System.Web.Helpers.AntiForgery και οι φίλοι που ενδιαφέρονται να δουν τον πηγαίο κώδικα θα διαπιστώσουν ότι στην πραγματικότητα, η μέθοδος εσωτερικής κλήσης του @Html.AntiForgeryToken() είναι η ίδια με αυτή της κλάσης AntiForgery.
Χρησιμοποιείται κυρίως για τη λήψη της αντίστοιχης φόρμας και του διακριτικού cookie μέσω δύο στατικών μεθόδων: AntiForgery.GetHtml() ή AntiForgery.GetTokens(συμβολοσειρά oldCookieToken, συμβολοσειρά newCookieToken, συμβολοσειρά formToken). Ωστόσο, θα πρέπει να σημειωθεί ότι μόλις κληθεί η μέθοδος GetHtml, θα δημιουργηθεί αυτόματα το αντίστοιχο διακριτικό cookie και, στη συνέχεια, ένα κομμάτι κώδικα HTML με κρυφό πεδίο τιμής διακριτικού φόρμας θα επιστραφεί απευθείας και η επιστρεφόμενη τιμή θα είναι σε αυτήν τη μορφή:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Το όνομα του κρυφού πεδίου είναι γενικά σταθερό σε "__RequestVerificationToken" και η τιμή είναι ένα κρυπτογραφημένο διακριτικό ασφαλείας. Αυτό το κρυφό πεδίο τοποθετείται συνήθως στη φόρμα που θα υποβληθεί και η τελική υποβολή επαληθεύεται σε σχέση με το διακριτικό cookie.
Εάν χρησιμοποιείτε τη μέθοδο GetTokens, μπορείτε να αποκτήσετε την κρυπτογραφημένη φόρμα και το διακριτικό cookie αφού περάσετε τις αντίστοιχες παραμέτρους, αλλά εδώ πρέπει να αποθηκεύσετε μόνοι σας τις αντίστοιχες τιμές.
Στη συνέχεια, θα εισαγάγουμε τη μέθοδο μη αυτόματης ενημέρωσης του AntiForgeryToken, κυρίως μέσω AJAX.
Κωδικός Πακέτου:
Κωδικός δοκιμής:
Διαπιστώσαμε ότι κατά την αποστολή ενός αιτήματος ajax, __RequestVerificationToken παράμετροι περιλαμβάνονται αυτόματα, όπως φαίνεται στο παρακάτω σχήμα:
|