forgejo/routers/web
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
..
admin Include heap pprof in diagnosis report to help debugging memory leaks (#28596) 2023-12-23 19:06:02 +00:00
auth Rate limit pre-activation email change separately 2023-12-27 12:09:16 +01:00
devtest Make "cancel" buttons have proper type in modal forms (#25618) 2023-07-03 14:04:50 +08:00
events Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
explore Allow to set explore page default sort (#27951) 2023-11-09 10:11:45 +00:00
feed [GITEA] Add repo empty check for branch feed 2023-12-25 13:41:48 +01:00
healthcheck Always enable caches (#28527) 2023-12-19 09:29:05 +00:00
misc [API] Forgejo API /api/forgejo/v1 2023-12-25 11:00:49 +01:00
org Use db.Find instead of writing methods for every object (#28084) 2023-11-24 03:49:41 +00:00
repo [GITEA] Allow release creation on commit (squash) s/SHAFullLength/FullLength/ 2023-12-25 13:41:50 +01:00
shared Use db.Find instead of writing methods for every object (#28084) 2023-11-24 03:49:41 +00:00
user [GITEA] Fix NPE in UsernameSubRoute 2023-12-25 13:45:36 +01:00
base.go Fix panic in storageHandler (#27446) 2023-10-06 13:23:14 +00:00
githttp.go Fix http protocol auth (#27875) 2023-11-02 22:14:33 +08:00
goget.go Support SSH for go get (#24664) 2023-05-12 09:44:37 +00:00
home.go Enhanced auth token / remember me (#27606) 2023-10-14 00:56:41 +00:00
metrics.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
nodeinfo.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
swagger_json.go Start using template context function (#26254) 2023-08-08 01:22:47 +00:00
web.go [GITEA] allow viewing the latest Action Run on the web 2023-12-25 13:41:49 +01:00
webfinger.go Add a link to OpenID Issuer URL in WebFinger response (#26000) 2023-07-20 16:02:45 +08:00