Sicherheit9 Min. Lesezeit

Best Practices für Telegram-Bot-Sicherheit

Ein Bot-Token ist ein Passwort, das jeder von überall aus nutzen kann, ohne zweiten Faktor und ohne Anmeldebenachrichtigung. Die meisten Telegram-Bot-Vorfälle beginnen genau dort. Hier ist, was du absichern solltest, in der Reihenfolge, in der es meist schiefgeht.

1. Behandle das Token als lebende Zugangsdaten

Wer dein Bot-Token besitzt, kontrolliert den Bot vollständig. Er kann eingehende Nachrichten lesen, Nachrichten in deinem Namen senden und deinen Webhook ändern, sodass dein eigener Server keine Updates mehr erhält. Es gibt keine Passwortabfrage und keine Geräte-Freigabe, die das verhindert.

Wo Tokens durchsickern

  • In ein Repository committet. Mit Abstand der häufigste Weg, und öffentliche Repositories werden fortlaufend von Bots gescannt, die nicht dir gehören.
  • In einen Support-Chat oder ein Issue-Tracking-System eingefügt. Sobald es in einem Ticket steht, landet es irgendwo in einem Suchindex.
  • Fest in einem Mobil- oder Frontend-Build codiert. Alles, was an ein Client-Gerät ausgeliefert wird, ist öffentlich.
  • In Logs zurückgelassen. Wenn du die vollständige API-URL loggst, steht das Token in der URL.

Was du stattdessen tun solltest

  • Bewahre das Token in einer Umgebungsvariable oder einem Secrets-Manager auf, niemals im Quellcode.
  • Füge .env vor dem ersten Commit zur .gitignore hinzu, nicht danach.
  • Maskiere das Token in der Log-Ausgabe.
  • Verwende getrennte Tokens für Entwicklung und Produktion, damit ein durchgesickertes Test-Token echte Nutzer nicht betreffen kann.

Wenn ein Token durchsickert, widerrufe es

Öffne BotFather, führe /revoke aus und wähle den Bot aus. Das alte Token funktioniert sofort nicht mehr, und du erhältst ein neues. Es zu rotieren kostet ein paar Minuten Ausfallzeit. Es zu belassen kostet den Bot. Die Git-Historie umzuschreiben hilft nicht, weil das Token bereits abgegriffen wurde.

2. Sichere den Webhook ab

Wenn dein Bot einen Webhook nutzt, ist diese URL ein offener Endpunkt im Internet. Jeder, der ihn findet, kann gefälschte Updates senden, die genau wie echter Telegram-Traffic aussehen.

  • Lege ein Secret Token fest. Die Methode setWebhook akzeptiert einen Parameter secret_token. Telegram sendet ihn dann bei jeder Anfrage im Header X-Telegram-Bot-Api-Secret-Token zurück. Lehne alles ab, was nicht übereinstimmt.
  • Nutze HTTPS mit einem gültigen Zertifikat. Telegram verlangt das, und es verhindert, dass die Nutzlast während der Übertragung lesbar ist.
  • Verwende einen nicht erratbaren Pfad. Ein zufälliges Segment in der URL ist für sich genommen keine echte Sicherheitsmaßnahme, aber es hält dich aus opportunistischen Scans heraus.
  • Begrenze, was du empfängst. Der Parameter allowed_updates lässt dich nur die Update-Typen abonnieren, die du tatsächlich verarbeitest. Weniger Angriffsfläche, weniger Parsing.
  • Antworte schnell. Bestätige die Anfrage und erledige die eigentliche Arbeit dann asynchron. Langsame Webhook-Handler sind ein Denial-of-Service-Vorfall, der nur darauf wartet zu passieren.

3. Vertraue niemals dem Inhalt eines Updates

Alles innerhalb eines Updates wurde von einem Nutzer eingegeben. Der Anzeigename, der Nachrichtentext, die Callback-Daten bei einem Button-Klick. All das ist von einem Angreifer kontrollierbare Eingabe.

  • Validiere Callback-Daten serverseitig. Ein Button, der order_id=123 trägt, kann mit order_id=124 erneut abgespielt werden. Prüfe, ob der klickende Nutzer tatsächlich Eigentümer des Datensatzes ist.
  • Escape den Nutzertext, bevor du ihn zurückgibst. Wenn du Nachrichten im HTML- oder Markdown-Modus sendest und einen Anzeigenamen direkt einfügst, kann ein präparierter Name dein Format zerstören oder einen Link einschleusen.
  • Parametrisiere Datenbankabfragen. Chat-Eingaben, die in einem Query-String landen, bergen dasselbe Injection-Risiko wie ein Webformular.
  • Begrenze die akzeptierten Größen. Lege Grenzen für Textlänge und Dateigröße fest, bevor du irgendetwas verarbeitest.

4. Sichere Admin-Befehle ab

Fast jeder Bot bekommt irgendwann einen Admin-Befehl. Broadcast, Rückerstattung, Nutzer exportieren. Genau hier wird aus einem funktionierenden Bot ein Vorfall.

  • Prüfe eine Positivliste von Nutzer-IDs serverseitig, gehalten in der Konfiguration. Leite Admin-Status niemals aus einem Benutzernamen ab, der geändert und wiederverwendet werden kann.
  • Verstecke nicht, verifiziere. Ein undokumentierter Befehl wird entdeckt, sobald ihn jemand ausprobiert. Verschleierung ist keine Kontrolle.
  • Bestätige destruktive Aktionen mit einem zweiten Schritt, und nenne im Bestätigungstext, was gleich passieren wird.
  • Protokolliere Admin-Aktionen mit Nutzer-ID und Zeitstempel, damit du später beantworten kannst, wer diesen Broadcast gesendet hat.

5. Aktiviere den Datenschutzmodus in Gruppen

Standardmäßig erhält ein Bot, der einer Gruppe hinzugefügt wird, nur Nachrichten, die Befehle sind, Antworten auf seine eigenen Nachrichten oder Erwähnungen von ihm. Dieser Standard heißt Datenschutzmodus und existiert aus gutem Grund.

Du kannst ihn mit /setprivacy in BotFather deaktivieren, sodass der Bot jede Nachricht in der Gruppe sieht. Tu das nur, wenn eine Funktion es wirklich braucht. Sobald er ausgeschaltet ist, speichert dein Server die Unterhaltungen anderer Leute, und diese Verantwortung liegt dann bei dir.

6. Begrenze deine eigene Rate und die deiner Nutzer

Telegram setzt eigene Limits durch, und sie zu erreichen führt zu Drosselung oder vorübergehender Sperrung. Als grobe Orientierung nennt Telegram etwa 30 Nachrichten pro Sekunde über verschiedene Chats hinweg und rund 20 Nachrichten pro Minute in dieselbe Gruppe. Betrachte das als Obergrenzen, die du deutlich unterschreiten solltest, nicht als Ziele.

  • Reihe ausgehende Nachrichten in eine Warteschlange ein, statt sie in einer engen Schleife zu senden.
  • Beachte den Retry-After-Wert, wenn die API einen 429er zurückgibt, statt sofort erneut zu versuchen.
  • Drossele auch pro Nutzer. Eine einzelne Person, die einen Befehl spammt, sollte nicht in der Lage sein, deine Kosten zu treiben oder dein Kontingent aufzubrauchen.
  • Lege eine Abklingzeit für alles Teure fest, etwa Aufrufe eines kostenpflichtigen KI-Modells oder einen Bildgenerierungsschritt.

7. Sammle weniger Nutzerdaten

Der sicherste Datensatz ist der, den du nie gespeichert hast. Bots sammeln standardmäßig Chat-IDs, Namen, Telefonnummern und Nachrichteninhalte an, und das meiste davon wird nie verwendet.

  • Speichere die Chat-ID und das, was du wirklich brauchst. Lass den Rest weg.
  • Logge keine vollständigen Nachrichtentexte, es sei denn, du hast einen konkreten Grund und eine Aufbewahrungsgrenze.
  • Lege eine Aufbewahrungsfrist fest und lösche nach Zeitplan.
  • Verschlüssele sensible Felder im Ruhezustand und beschränke, wer die Datenbank abfragen darf.
  • Unterstütze Löschanfragen. Nach der DSGVO und ähnlichen Gesetzen kann dich ein Nutzer bitten, seine Daten zu entfernen, und du brauchst einen Weg, das zu tun.
  • Nenne, was du sammelst, in einer Datenschutzerklärung, auf die der Bot verlinken kann.

Beachte, dass Telefonnummern nur bei dir ankommen, wenn der Nutzer eine Kontaktfreigabe-Schaltfläche antippt. Eine anzufordern, die du nicht brauchst, ist zugleich ein Conversion-Verlust und eine Haftungsfrage.

8. Verifiziere Web-App- und Login-Widget-Daten

Wenn dein Bot eine Telegram Web App öffnet oder du das Login Widget auf einer Website nutzt, kommen die Nutzerdaten mit einem Hash an. Verifiziere diesen Hash auf deinem Server mit deinem Bot-Token, bevor du auch nur einem einzigen Feld vertraust. Diese Prüfung zu überspringen bedeutet, dass jeder durch Manipulation der Anfrage vorgeben kann, ein beliebiger Nutzer zu sein.

9. Behalte auch die unspektakulären Dinge im Blick

  • Aktualisiere Abhängigkeiten. Die meisten echten Kompromittierungen kommen über eine Bibliothek, nicht über Telegram selbst.
  • Beschränke, wer deployen und wer Produktionsgeheimnisse lesen darf.
  • Achte auf ungewöhnliche Muster: einen Ausschlag bei einem einzelnen Befehl, Nachrichten eines einzelnen Nutzers in enger Schleife, Anfragen, die die Secret-Token-Prüfung nicht bestehen.
  • Habe einen Plan für den schlechten Tag. Token widerrufen, Webhook stoppen, aus einem Backup wiederherstellen. Schreib es auf, bevor du es brauchst.

Die Checkliste

  • Das Token lebt in Umgebungsvariablen, nicht in Git, und wird in Logs maskiert.
  • Du weißt, wie du /revoke in BotFather ausführst.
  • Der Webhook nutzt HTTPS und ein Secret Token, das du bei jeder Anfrage verifizierst.
  • allowed_updates ist nur auf das gesetzt, was du verarbeitest.
  • Callback-Daten werden serverseitig autorisiert, nicht so vertraut, wie sie gesendet wurden.
  • Nutzertext wird escaped, bevor er in einer formatierten Nachricht zurückgegeben wird.
  • Admin-Befehle prüfen eine ID-Positivliste und werden protokolliert.
  • Der Datenschutzmodus ist aktiv, außer eine Funktion braucht ihn wirklich deaktiviert.
  • Ausgehende Nachrichten werden in eine Warteschlange gereiht, und 429-Antworten werden respektiert.
  • Du speicherst das Minimum, löschst nach Zeitplan und kannst eine Löschanfrage erfüllen.
  • Web-App- und Login-Widget-Payloads werden per Hash verifiziert.

Überspring die Teile, die schiefgehen

Mit TeleMinute wird dein Token serverseitig gespeichert, der Webhook wird für dich verwaltet, und es gibt keinen eigenen Server, den du exponiert lassen könntest. Du schreibst die Konversation, wir betreiben die Infrastruktur.

Heute mit dem Aufbau beginnen

Weiterlesen

Häufig gestellte Fragen

Was passiert, wenn mein Telegram-Bot-Token durchsickert?

Wer es besitzt, kontrolliert den Bot vollständig. Er kann eingehende Nachrichten lesen, Nachrichten in deinem Namen senden und deinen Webhook ändern, sodass dein eigener Server keine Updates mehr erhält. Es gibt keine Passwortabfrage, die das verhindert.

Wie widerrufe ich ein Telegram-Bot-Token?

Öffne BotFather, sende den Widerrufsbefehl und wähle den Bot aus. Das alte Token funktioniert sofort nicht mehr, und du erhältst ein neues. Die Git-Historie umzuschreiben hilft nicht, weil ein durchgesickertes Token innerhalb von Minuten abgegriffen wird.

Sieht mein Bot jede Nachricht in einer Gruppe?

Nur wenn du den Datenschutzmodus deaktivierst. Standardmäßig erhält ein Bot in einer Gruppe nur Befehle, Antworten auf seine eigenen Nachrichten und direkte Erwähnungen. Den Datenschutzmodus auszuschalten bedeutet, dass dein Server die Unterhaltungen anderer Leute speichert.

Brauche ich ein Secret Token für meinen Webhook?

Ja. Ohne eines kann jeder, der deine Webhook-URL findet, gefälschte Updates senden, die genau wie echter Telegram-Traffic aussehen. Lege das Secret bei der Registrierung des Webhooks fest und lehne Anfragen ab, deren Header nicht übereinstimmt.