In ASP.net implementiere ich ein IHttpModule, CSRF-Angriffe zu lindern. Es injiziert in die Antwort html einen versteckten Formularparameter mit der asp.net SessionID auf GETs. Bei POSTs überprüft es dann, ob der Wert des ausgeblendeten Parameters mit der aktuellen SessionID übereinstimmt. Soweit ich weiß, kann der SessionID-Wert nur aus dem Cookie abgerufen werden, der von der schädlichen Website nicht gelesen oder bestimmt werden konnte. Gibt es etwas, was ich übersehe?CSRF Validierungs-Token: Sitzungs-ID sicher?
Antwort
Dieser Ansatz ist richtig. Sie müssen sicherstellen, dass alle über eine GET-Operation verfügbaren Aktionen "sicher" sind (was ohnehin empfehlenswert ist), da Sie Ihren XSRF-Schutz nur auf POSTs anwenden.
Für eine zusätzliche Versicherung könnten Sie es auch auf GETs verwenden (indem Sie allen Ihren Links einen URL-Parameter hinzufügen und bei jeder GET-Anfrage darauf achten), aber das ist umständlich.
Wenn Sie extra paranoid sind, können Sie eine andere Zufallszahl für die alternative ID wählen. Dies würde Sie schützen, selbst wenn ein Browser Ihr Session-Cookie fälschlicherweise für feindliches Javascript auf einer anderen Site zugänglich macht. Wenn eine Sitzung erstellt wird, wählen Sie eine andere große Zufallszahl und speichern Sie sie in Ihrer Sitzung.
Idealerweise möchten Sie etwas anderes als Session-ID verwenden, aber das ist es im Grunde. OWASP schlägt vor, einen zufälligen Formularelementnamen zu verwenden, der in der Benutzersitzung gespeichert wird. Auf diese Weise würde ein Angreifer nicht einmal in der Lage sein, das korrekte versteckte Feld zu fälschen.
Die Randomisierung des Formularelementnamens ist eine interessante Idee. Danke für den Link. – ironsam
- 1. Sind ASP.NET MVC 4 Beta Editor-Vorlagen sicher gegen CSRF?
- 2. Warum erlauben Browser CSRF?
- 3. Angular2 Http Laravel CSRF-Token
- 4. Ist CSRF ohne Cookies möglich?
- 5. Django REST-Framework CSRF fehlgeschlagen: CSRF Cookie nicht
- 6. Ist es sicher, das CSRF-Token auf derselben Seite wie das gesicherte Formular zu generieren?
- 7. Wie wird Synchronizer Token Pattern verwendet, um CSRF sicher zu verhindern?
- 8. CSRF-Schutz mit Symfony
- 9. symfony2 CSRF ungültig
- 10. eckig, django und csrf
- 11. csrf token mit
- 12. Flask: CSRF Überprüfung fehlgeschlagen
- 13. CSRF in tokenbasierter Authentifizierung
- 14. Django - 2 csrf Tokens
- 15. Spring Security CSRF Token
- 16. Funktioniert Djangos CSRF-Schutz?
- 17. wtforms, CSRF, Kolben, FieldList
- 18. Ajax, CSRF und DELETE
- 19. Braintree CSRF-Token fehlt
- 20. Django - CSRF-Verifizierung fehlgeschlagen
- 21. csrf Fehler in Django
- 22. Flask-Security CSRF-Token
- 23. CSRF nicht übereinstimmendes Token
- 24. Codeigniter CSRF JQuery Ausgabe
- 25. Fragment-Caching & CSRF
- 26. CSRF auf einer Anmeldeseite
- 27. Django - Javascript - Csrf Token
- 28. Symfony CSRF Tests nicht
- 29. CodeIgniter, CSRF-Token
- 30. Kraken.js CSRF Handhabung
Ich werde mich jetzt wahrscheinlich nicht um die GETs kümmern, da es nicht gültig (aber offensichtlich möglich) ist, dass http den Status mit ihnen ändert. Solange wir diese Konvention/diesen Standard einhalten, sollte es uns gut gehen. Ich kann prüfen, ob ich einen anderen Wert als die SessionID für zusätzliche Sicherheit verwende, wie du erwähnt hast - danke. – ironsam