Microsoft bietet uns integrierte Funktionen, die wir aus Sicherheitsgründen in unserer Anwendung verwenden, sodass niemand unsere Website hacken oder in wichtige Informationen eindringen kann.
Verwendung von ValidateAntiForgeryToken
Versuchen wir anhand eines einfachen Beispiels, dieses Konzept zu verstehen. Ich möchte es nicht zu kompliziert machen, deshalb werde ich eine Vorlage einer MVC-Anwendung verwenden, die bereits in Visual Studio verfügbar ist. Wir werden dies Schritt für Schritt tun. Lasst uns beginnen.
Schritt 1 - Erstellen Sie zwei MVC-Anwendungen mit der Standard-Internetvorlage und geben Sie diese Namen als CrossSite_RequestForgery bzw. Attack_Application an.
Öffnen Sie nun die Webkonfiguration der CrossSite_RequestForgery-Anwendung, ändern Sie die Verbindungszeichenfolge durch die unten angegebene und speichern Sie sie.
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
Klicken Sie nun auf Extras >> NuGet Package Manager und dann auf Package Manager Console
Führen Sie nun die folgenden drei Befehle in der Package Manager-Konsole aus, um die Datenbank zu erstellen.
Enable-Migrations Add-Migration erste Update-Datenbank
Wichtige Hinweise - Ich habe eine Datenbank mit Code First-Ansatz erstellt, da ich dieses Beispiel so gestalten möchte, wie Entwickler arbeiten. Sie können die Datenbank auch manuell erstellen. Es ist deine Wahl.
- Öffnen Sie nun den Account Controller. Hier sehen Sie eine Registermethode, deren Typ post ist. Über dieser Methode sollte ein Attribut als [ValidateAntiForgeryToken] verfügbar sein. Kommentieren Sie dieses Attribut. Klicken Sie nun mit der rechten Maustaste auf Registrieren und gehen Sie zu Anzeigen. Auch hier finden Sie einen HTML-Helfer als @ Html.AntiForgeryToken (). Kommentieren Sie auch diesen. Führen Sie die Anwendung aus und klicken Sie auf die Schaltfläche Registrieren. Die URL wird geöffnet als:
http: // localhost: 52269 / Account / Register
Anmerkungen - Ich weiß jetzt, dass in den Köpfen aller Leser die Frage aufgeworfen wird, warum diese beiden Helfer kommentiert werden müssen, da jeder weiß, dass diese zur Validierung der Anfrage verwendet werden. Dann möchte ich Sie alle wissen lassen, dass dies nur deshalb so ist, weil ich den Unterschied nach und vor dem Anwenden dieser Helfer zeigen möchte.
Öffnen Sie nun die zweite Anwendung, Attack_Application. Öffnen Sie dann die Registrierungsmethode des Account Controllers. Ändern Sie einfach die POST-Methode durch die unten gezeigte einfache.
Anmeldeformular
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7. Angenommen, Sie sind ein Hacker und kennen die URL, unter der Sie Benutzer in der Anwendung CrossSite_RequestForgery registrieren können. Jetzt haben Sie eine Fälschungssite als Attacker_Application erstellt und einfach dieselbe URL in die Post-Methode eingefügt.
8. Führen Sie diese Anwendung jetzt aus, füllen Sie die Registerfelder aus und klicken Sie auf Registrieren. Sie werden sehen, dass Sie in der Anwendung CrossSite_RequestForgery registriert sind. Wenn Sie die Datenbank der Anwendung CrossSite_RequestForgery überprüfen, wird der von Ihnen eingegebene Eintrag angezeigt.
- Wichtig - Öffnen Sie jetzt die Anwendung CrossSite_RequestForgery, kommentieren Sie das Token im Account Controller aus und registrieren Sie die Ansicht. Versuchen Sie erneut, sich mit demselben Vorgang zu registrieren. Dann tritt ein Fehler wie unten auf.
Serverfehler in '/' Anwendung. ________________________________________ Das erforderliche Fälschungsschutz-Cookie "__RequestVerificationToken" ist nicht vorhanden.
Das sagt das Konzept. Was wir in View hinzufügen, dh @ Html.AntiForgeryToken (), generiert __RequestVerificationToken beim Laden und [ValidateAntiForgeryToken] für die Controller-Methode. Ordnen Sie diesen Token der Post-Zeit zu. Wenn das Token dasselbe ist, bedeutet dies, dass dies eine gültige Anforderung ist.