Code-Cleanup: toter Check, none-Sentinel, Login-Jitter raus
- entry.go: redundantes stored != "" entfernt - filepath-Sentinel "none" -> leerer String (Go-Zero-Value), Checks in entry.go/user.go und web/js/app.js vereinfacht - auth.go: zufaelligen Login-Jitter samt loginJitter-Variable und Test-Seam entfernt (war nur Spielerei, kein echter Schutz) - notes/migrations.md: einmalige "none"->"" Migration dokumentiert Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
crand "crypto/rand"
|
||||
"database/sql"
|
||||
"encoding/hex"
|
||||
"math/rand/v2"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -27,10 +26,6 @@ var (
|
||||
reSpace = regexp.MustCompile(`\s+`)
|
||||
)
|
||||
|
||||
// loginJitter ist die Obergrenze (in ms) der zufälligen Login-Verzögerung gegen
|
||||
// Timing-Angriffe. Tests setzen den Wert auf 0, um die Verzögerung abzuschalten.
|
||||
var loginJitter = 2000
|
||||
|
||||
// getSession liest den session-Cookie und liefert die zugehörige, noch gültige Session.
|
||||
func getSession(r *http.Request) (*Session, bool) {
|
||||
c, err := r.Cookie("session")
|
||||
@@ -70,12 +65,6 @@ func handleLogin(w http.ResponseWriter, r *http.Request) {
|
||||
var uid int64
|
||||
var hash []byte
|
||||
err := db.QueryRow(`SELECT uid, password FROM user WHERE username = ?`, username).Scan(&uid, &hash)
|
||||
|
||||
// Gegen Timing-Angriffe: immer eine kleine, zufällige Verzögerung.
|
||||
if loginJitter > 0 {
|
||||
time.Sleep(time.Duration(rand.IntN(loginJitter)) * time.Millisecond)
|
||||
}
|
||||
|
||||
if err == sql.ErrNoRows {
|
||||
writeError(w, http.StatusUnauthorized, "Nutzername oder Passwort ist falsch.")
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user