fix(csrf): CSRF-Token in Login-Fehlerseite fehlt — macht Retry-Versuch unmöglich
HandleLoginPost renderte Fehlerseiten (falsches Passwort, leere Felder) ohne CSRFToken in den Template-Daten. Das hidden field <csrf_token> war leer, sodass jeder weitere Submit-Versuch mit "Ungültiger CSRF-Token" scheiterte. Fix: setCSRFCookie am Anfang des Handlers aufrufen und das Token in allen renderError-Pfaden an das Template übergeben. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8e0501a012
commit
73c3d74098
1 changed files with 11 additions and 6 deletions
|
|
@ -76,13 +76,18 @@ func HandleLoginUI(authStore *store.AuthStore, screenStore *store.ScreenStore, c
|
||||||
func HandleLoginPost(authStore *store.AuthStore, screenStore *store.ScreenStore, cfg config.Config) http.HandlerFunc {
|
func HandleLoginPost(authStore *store.AuthStore, screenStore *store.ScreenStore, cfg config.Config) http.HandlerFunc {
|
||||||
tmpl := template.Must(template.New("login").Parse(loginTmpl))
|
tmpl := template.Must(template.New("login").Parse(loginTmpl))
|
||||||
|
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// K1: CSRF-Cookie erneuern und Token für Fehler-Re-Rendering bereitstellen.
|
||||||
|
// Das Token muss auch bei Fehlerantworten im Hidden-Field stehen, damit
|
||||||
|
// der nächste Submit-Versuch den CSRF-Check besteht.
|
||||||
|
csrfToken := setCSRFCookie(w, r, cfg.DevMode)
|
||||||
|
|
||||||
renderError := func(w http.ResponseWriter, next, msg string) {
|
renderError := func(w http.ResponseWriter, next, msg string) {
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
w.WriteHeader(http.StatusUnauthorized)
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
_ = tmpl.Execute(w, loginData{Error: msg, Next: next})
|
_ = tmpl.Execute(w, loginData{Error: msg, Next: next, CSRFToken: csrfToken})
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
renderError(w, "", "Ungültige Anfrage.")
|
renderError(w, "", "Ungültige Anfrage.")
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue