Taktsperre
Die Anwendung begrenzt, wie viele Anfragen in einem Zeitfenster durchgehen. Wird die Grenze überschritten, antwortet sie mit 429.
Die Grenzen
| Bereich | Grenze |
|---|---|
| alles Übrige | 120 Anfragen je Minute |
POST /auth/login | 10 je Minute |
POST /auth/register | 5 je Minute |
POST /auth/refresh | 20 je Minute |
POST /auth/forgot-password | 3 je fünf Minuten |
POST /auth/reset-password | 5 je fünf Minuten |
Die Erneuerung darf großzügiger sein als die Anmeldung: Ein normaler Arbeitstag erneuert alle fünfzehn Minuten, mehrere offene Reiter entsprechend häufiger. Gedrosselt ist sie trotzdem — auch sie ist öffentlich und prüft ein Geheimnis.
Zurücksetzen und Registrieren sind eng getaktet: Beide sind öffentlich, und das eine verschickt Mail.
Wonach gezählt wird
Für angemeldete Anfragen zählt das Benutzerkonto, davor die IP-Adresse.
Ein Betrieb sitzt hinter einer gemeinsamen öffentlichen Adresse. Zählte die Begrenzung nach IP, teilten sich sämtliche Mitarbeiter ein Kontingent — die Vertriebsabteilung brächte die Zeiterfassung der Werkstatt zum Erliegen, und niemand verstünde, warum.
Für alles vor der Anmeldung bleibt es bei der Adresse: Dort ist gerade sie das Richtige, denn ein Angreifer probiert viele Konten von einer Adresse aus.
Hinter einem vorgeschalteten Server
Die echte Adresse steht dann in X-Forwarded-For. Ohne diesen Kopf zählt jede Anfrage auf dieselbe Adresse — und die Anmeldung wäre nach zehn Versuchen für den ganzen Betrieb gesperrt. Siehe HTTPS einrichten.
Ein API-Schlüssel zählt als Benutzer
Er trägt die Kennung des ausstellenden Kontos beziehungsweise seine eigene. Zwei Schlüssel teilen sich also kein Kontingent, ein Schlüssel und sein Aussteller unter Umständen schon.
Was außerdem gegen das Durchprobieren wirkt
Nach fünf fehlgeschlagenen Anmeldungen wird das Konto für fünfzehn Minuten gesperrt — unabhängig von der Taktsperre und unabhängig davon, von welcher Adresse die Versuche kamen.
Im Testlauf
Ein Browsertestlauf kommt von einer einzigen Adresse und meldet sich in Sekunden ein Dutzend Mal an. Die Sperre greift dann richtig, aber sie prüft nicht mehr die Anwendung, sondern sich selbst.
Dafür gibt es einen Schalter, und er hat zwei Bedingungen: TAKTSPERRE_AUS=1 muss ausdrücklich gesetzt sein, und NODE_ENV darf nicht production sein. Eine versehentlich gesetzte Umgebungsvariable kann die Sperre im Betrieb also nicht öffnen.