Harden CSRF/CSP and add hash version upgrades
This commit is contained in:
@@ -60,6 +60,7 @@ public static class AuthEndpoints
|
||||
NormalizedUsername = validated.NormalizedUsername,
|
||||
PasswordHash = hash,
|
||||
PasswordSalt = salt,
|
||||
PasswordHashVersion = PasswordHasher.CurrentVersion,
|
||||
DisplayName = validated.DisplayName,
|
||||
IsAdmin = isAdmin,
|
||||
IsOwner = isOwner,
|
||||
@@ -104,12 +105,21 @@ public static class AuthEndpoints
|
||||
}
|
||||
|
||||
var player = await db.Players.FirstOrDefaultAsync(p => p.NormalizedUsername == normalizedUsername);
|
||||
if (player == null || !PasswordHasher.Verify(request.Password ?? string.Empty, player.PasswordHash, player.PasswordSalt))
|
||||
if (player == null
|
||||
|| !PasswordHasher.Verify(request.Password ?? string.Empty, player.PasswordHash, player.PasswordSalt, player.PasswordHashVersion, out var needsRehash))
|
||||
{
|
||||
authAttemptMonitor.RecordFailure(ctx, "auth-login", normalizedUsername, "invalid-credentials");
|
||||
return EndpointHelpers.UnauthorizedError("Invalid username or password.");
|
||||
}
|
||||
|
||||
if (needsRehash)
|
||||
{
|
||||
var (upgradedHash, upgradedSalt) = PasswordHasher.HashPassword(request.Password ?? string.Empty);
|
||||
player.PasswordHash = upgradedHash;
|
||||
player.PasswordSalt = upgradedSalt;
|
||||
player.PasswordHashVersion = PasswordHasher.CurrentVersion;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(player.DisplayName))
|
||||
{
|
||||
player.DisplayName = EndpointHelpers.TrimTo(player.Username, AuthValidator.MaxDisplayNameLength);
|
||||
|
||||
Reference in New Issue
Block a user