bvandeusen and Claude Opus 5.5
3bfddd0862
test-go / test (push) Successful in 1m54s
test-web / test (push) Successful in 1m34s
test-go / integration (push) Successful in 4m56s
android / Build + lint + test (push) Successful in 5m41s
release / Build signed APK (releases and dev) (push) Successful in 5m52s
release / Build + push container image (push) Canceled after 0s
release / Verify release artifacts (tag releases only) (push) Canceled after 0s
feat(auth): throttle login, register, password reset and Subsonic auth failures (M462 #4976 )
...
Every password-shaped check was mounted bare, so guessing was limited only
by bcrypt cost. A shared in-memory AttemptLimiter now sits in front of them:
- login: 10 failures per account and 50 per address per 15 min, checked
before the user lookup and bcrypt; 429 with Retry-After. A success clears
the account's count but not the address's.
- unknown usernames run a dummy bcrypt compare, so timing no longer says
which accounts exist.
- register: 10 per address per hour; forgot-password: 5 per address and 3
per email per hour (applied whether or not the email matches); reset: 20
failed tokens per address per 15 min.
- Subsonic /rest: same limits as login, counting only wrong credentials,
since clients authenticate on every request.
Web login, register, reset and forgot-password screens say how long to
wait; web and Android carry copy for the rate_limited code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 08:28:29 -04:00
..
2026-05-17 21:05:36 -04:00
2026-05-07 20:10:18 -04:00
2026-06-02 18:11:25 -04:00
2026-09-11 17:53:55 -04:00
2026-05-07 07:59:40 -04:00
2026-05-07 20:10:18 -04:00
2026-05-16 18:41:21 -04:00
2026-05-16 18:41:21 -04:00
2026-09-11 17:11:11 -04:00
2026-09-11 17:53:55 -04:00
2026-09-11 17:53:55 -04:00
2026-09-11 17:53:55 -04:00
2026-05-07 12:01:16 -04:00
2026-05-08 10:46:43 -04:00
2026-08-16 11:48:45 -04:00
2026-08-17 00:19:48 -04:00
2026-05-17 20:22:30 -04:00
2026-05-08 23:07:15 -04:00
2026-08-05 10:07:43 -04:00
2026-09-11 14:23:01 -04:00
2026-09-11 14:23:01 -04:00
2026-08-17 00:02:41 -04:00
2026-07-03 09:29:33 -04:00
2026-07-03 09:29:33 -04:00
2026-07-03 09:22:03 -04:00
2026-09-10 20:51:15 -04:00
2026-05-18 12:24:20 -04:00
2026-05-12 20:55:33 -04:00
2026-05-04 20:13:31 -04:00
2026-05-07 20:10:18 -04:00
2026-05-07 12:43:44 -04:00
2026-05-08 10:18:35 -04:00
2026-07-13 22:24:28 -04:00
2026-07-13 22:24:28 -04:00
2026-05-08 10:40:03 -04:00
2026-09-11 14:23:01 -04:00
2026-05-17 20:22:30 -04:00
2026-06-29 18:38:56 -04:00
2026-10-06 08:28:29 -04:00
2026-05-07 12:49:30 -04:00
2026-10-06 08:28:29 -04:00
2026-05-07 11:56:19 -04:00
2026-10-06 08:28:29 -04:00
2026-05-07 12:49:30 -04:00
2026-10-06 08:28:29 -04:00
2026-10-06 08:28:29 -04:00
2026-10-06 08:28:29 -04:00
2026-06-04 07:44:33 -04:00
2026-06-04 08:29:51 -04:00
2026-09-09 21:51:41 -04:00
2026-09-09 21:51:41 -04:00
2026-04-21 23:02:20 -04:00
2026-08-17 12:56:31 -04:00
2026-06-30 16:33:01 -04:00
2026-05-07 19:48:25 -04:00
2026-10-06 08:28:29 -04:00
2026-06-20 12:59:27 -04:00
2026-05-12 20:44:37 -04:00
2026-05-08 11:29:36 -04:00
2026-07-14 12:47:59 -04:00
2026-09-11 14:23:01 -04:00
2026-09-11 14:23:01 -04:00
2026-05-13 20:41:44 -04:00
2026-06-11 19:33:46 -04:00
2026-05-01 18:00:59 -04:00
2026-08-05 13:22:30 -04:00
2026-08-17 13:38:08 -04:00
2026-08-05 21:17:59 -04:00
2026-04-28 09:27:06 -04:00
2026-05-09 22:47:25 -04:00
2026-08-17 12:56:31 -04:00
2026-08-17 12:56:31 -04:00
2026-05-10 18:47:30 -04:00
2026-09-11 17:58:05 -04:00
2026-08-05 13:50:29 -04:00
2026-04-29 17:35:45 -04:00
2026-05-07 21:19:35 -04:00
2026-05-08 10:40:03 -04:00
2026-05-13 14:27:23 -04:00
2026-04-28 09:27:06 -04:00
2026-05-08 08:26:43 -04:00
2026-05-04 07:05:49 -04:00
2026-05-08 08:44:50 -04:00
2026-05-07 12:38:48 -04:00
2026-05-08 08:44:50 -04:00
2026-05-07 12:38:48 -04:00
2026-06-29 18:38:56 -04:00
2026-07-13 18:16:04 -04:00
2026-08-06 21:08:58 -04:00
2026-08-05 09:17:40 -04:00
2026-08-05 09:17:40 -04:00
2026-05-04 18:13:13 -04:00
2026-05-08 08:44:50 -04:00
2026-06-02 18:24:23 -04:00
2026-05-17 20:22:30 -04:00
2026-05-13 11:58:24 -04:00
2026-05-07 12:38:48 -04:00
2026-05-08 08:26:43 -04:00
2026-06-02 18:24:23 -04:00
2026-05-04 15:21:24 -04:00
2026-06-04 08:29:51 -04:00
2026-08-06 21:08:58 -04:00
2026-08-06 21:08:58 -04:00
2026-06-02 11:25:50 -04:00
2026-06-20 12:59:27 -04:00
2026-05-17 20:22:30 -04:00
2026-05-08 10:40:03 -04:00
2026-08-16 11:43:05 -04:00
2026-05-17 20:22:30 -04:00
2026-04-30 20:19:39 -04:00
2026-05-12 21:28:05 -04:00
2026-05-08 11:05:25 -04:00
2026-09-11 08:44:33 -04:00
2026-05-08 12:05:35 -04:00
2026-05-12 20:55:33 -04:00
2026-05-07 22:18:40 -04:00
2026-05-07 21:28:20 -04:00
2026-04-21 08:29:28 -04:00
2026-05-08 10:46:43 -04:00
2026-06-03 11:34:02 -04:00
2026-06-03 13:41:54 -04:00
2026-05-01 06:23:08 -04:00
2026-08-02 20:31:12 -04:00
2026-08-17 12:56:31 -04:00