forgejo/routers/web/auth
Gergely Nagy e35d2af2e5
Rate limit pre-activation email change separately
Changing the email address before any email address is activated should
be subject to a different rate limit than the normal activation email
resending. If there's only one rate limit for both, then if a newly
signed up quickly discovers they gave a wrong email address, they'd have
to wait three minutes to change it.

With the two separate limits, they don't - but they'll have to wait
three minutes before they can change the email address again.

The downside of this setup is that a malicious actor can alternate
between resending and changing the email address (to something like
`user+$idx@domain`, delivered to the same inbox) to effectively halving
the rate limit. I do not think there's a better solution, and this feels
like such a small attack surface that I'd deem it acceptable.

The way the code works after this change is that `ActivatePost` will now
check the `MailChangeLimit_user` key rather than `MailResendLimit_user`,
and if we're within the limit, it will set `MailChangedJustNow_user`. The
`Activate` method - which sends the activation email, whether it is a
normal resend, or one following an email change - will check
`MailChangedJustNow_user`, and if it is set, it will check the rate
limit against `MailChangedLimit_user`, otherwise against
`MailResendLimit_user`, and then will delete the
`MailChangedJustNow_user` key from the cache.

Fixes #2040.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2023-12-27 12:09:16 +01:00
..
2fa.go Enhanced auth token / remember me (#27606) 2023-10-14 00:56:41 +00:00
auth.go Rate limit pre-activation email change separately 2023-12-27 12:09:16 +01:00
linkaccount.go Final round of db.DefaultContext refactor (#27587) 2023-10-14 08:37:24 +00:00
main_test.go make writing main test easier (#27270) 2023-09-28 01:38:53 +00:00
oauth.go [GITEA] oauth2: use link_account page when email/username is missing (#1757) 2023-12-25 13:41:49 +01:00
oauth_test.go Bump github.com/golang-jwt/jwt to v5 (#25975) 2023-07-19 09:57:10 +00:00
openid.go Enhanced auth token / remember me (#27606) 2023-10-14 00:56:41 +00:00
password.go Always enable caches (#28527) 2023-12-19 09:29:05 +00:00
webauthn.go Enhanced auth token / remember me (#27606) 2023-10-14 00:56:41 +00:00