Commit dd88c50
committed
feat: add rate limiting for authentication endpoints
Implement comprehensive rate limiting to prevent brute force attacks and email enumeration on authentication endpoints.
Backend changes:
- Add express-rate-limit package (v8.2.1)
- Create authRateLimiter: 5 requests/hour for magic links
- Create strictAuthRateLimiter: 3 requests/15min for password resets
- Apply IP-based rate limiting with IPv6 support
- Return structured error responses with retry time
Frontend changes:
- Add rate limit error detection (429 status)
- Display user-friendly error messages with Shield icon
- Show calculated retry time in minutes
- Disable submit buttons when rate limited
- Add red security-themed error styling
Security improvements:
- Prevents brute force authentication attempts
- Mitigates email enumeration attacks
- IP-based tracking with proper IPv6 handling
- Clear user feedback with retry information
Tested with curl: both endpoints correctly limit requests and return proper error messages with retry times.1 parent 848023e commit dd88c50
5 files changed
Lines changed: 173 additions & 16 deletions
File tree
- packages
- server
- src
- web/src/pages
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| 32 | + | |
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| |||
552 | 553 | | |
553 | 554 | | |
554 | 555 | | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
555 | 593 | | |
556 | 594 | | |
557 | 595 | | |
| |||
615 | 653 | | |
616 | 654 | | |
617 | 655 | | |
618 | | - | |
| 656 | + | |
619 | 657 | | |
620 | 658 | | |
621 | 659 | | |
622 | 660 | | |
623 | 661 | | |
624 | 662 | | |
625 | 663 | | |
626 | | - | |
627 | | - | |
| 664 | + | |
628 | 665 | | |
629 | | - | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
630 | 673 | | |
631 | 674 | | |
632 | 675 | | |
633 | | - | |
634 | | - | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
635 | 681 | | |
636 | 682 | | |
637 | 683 | | |
| |||
674 | 720 | | |
675 | 721 | | |
676 | 722 | | |
677 | | - | |
| 723 | + | |
678 | 724 | | |
679 | 725 | | |
680 | 726 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
26 | 28 | | |
27 | 29 | | |
28 | 30 | | |
| 31 | + | |
| 32 | + | |
29 | 33 | | |
30 | 34 | | |
31 | 35 | | |
| |||
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
43 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
44 | 55 | | |
45 | 56 | | |
46 | 57 | | |
| |||
140 | 151 | | |
141 | 152 | | |
142 | 153 | | |
143 | | - | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
144 | 190 | | |
145 | 191 | | |
146 | 192 | | |
147 | 193 | | |
148 | 194 | | |
149 | | - | |
| 195 | + | |
150 | 196 | | |
151 | 197 | | |
152 | 198 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
359 | 359 | | |
360 | 360 | | |
361 | 361 | | |
362 | | - | |
363 | | - | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
364 | 373 | | |
365 | 374 | | |
366 | 375 | | |
| |||
570 | 579 | | |
571 | 580 | | |
572 | 581 | | |
573 | | - | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
574 | 620 | | |
575 | 621 | | |
576 | 622 | | |
577 | 623 | | |
578 | 624 | | |
579 | | - | |
| 625 | + | |
580 | 626 | | |
581 | 627 | | |
582 | 628 | | |
| |||
0 commit comments