Bot-Token: warum er nie im Code stehen darf
Warum ein Token weder im Code noch in Git auftauchen darf und wie Sie ihn in Python und Node.js aus Umgebungsvariablen lesen.
Der Token eines Bots ist sein Passwort. Wer ihn besitzt, kann sich an seiner Stelle anmelden und in seinem Namen handeln. Die Regel dafür: Der Token lebt in der Umgebung des Bots, nie im Code, nie in Git, nie in einer Nachricht.
- Der Token ist ein Passwort: Er gehört nicht in den Code, nicht nach Git und nicht in eine Nachricht.
- Der Code liest DISCORD_TOKEN aus der Umgebung und meldet einen fehlenden Wert deutlich.
- Ein offengelegter Token wird im Entwicklerportal zurückgesetzt, und der alte hört auf zu funktionieren.
Warum der Token nicht in den Code gehört
Ein Token, der in bot.py oder index.js steht, landet in jeder Kopie des Projekts, in der Git-Historie, auf Screenshots und in Sicherungen. Schon ein einziges Leck an einer dieser Stellen genügt, um den Bot zu gefährden.
- Ein öffentliches Git-Repository zeigt den Token allen, selbst nach dem Löschen der Datei: Die Historie bewahrt ihn.
- Wenn ein Token durchsickert, setzen Sie ihn sofort im Discord-Entwicklerportal zurück: Der alte funktioniert nicht mehr.
- Ein Token, der in eine Support-Nachricht oder in einen Discord-Kanal kopiert wird, ist ebenfalls offengelegt: kopieren Sie ihn nie dorthin.
Den Token aus der Umgebung lesen
Eine Umgebungsvariable ist ein Wert, den das System beim Start an das Programm übergibt. Der Code liest ihn über seinen Namen, und der Token bleibt außerhalb des Projekts.
- Python: import os, dann token = os.environ["DISCORD_TOKEN"] und bot.run(token).
- Node.js: client.login(process.env.DISCORD_TOKEN), ohne weiteren Inhalt in der Datei.
- Lokal kann eine .env-Datei DISCORD_TOKEN=votre_token enthalten; fügen Sie sie zu .gitignore hinzu, damit sie nie committet wird.
Prüfen und reagieren
Ein Code, der eine leere Variable liest, sollte deutlich scheitern, statt mit einem leeren Token eine Verbindung zu versuchen. Die Fehlermeldung nennt dann, was fehlt.
- Python: if not token: raise SystemExit("DISCORD_TOKEN fehlt") vor dem Start des Clients.
- Node.js: if (!process.env.DISCORD_TOKEN) throw new Error("DISCORD_TOKEN fehlt");
- Gateway-Schlusscode 4004 oder LoginFailure: Der Token ist falsch oder wurde zurückgesetzt. Prüfen Sie die Variable, ohne sie irgendwo anders abzuschreiben.
Warum ACLClouds den Token aus dem Repository heraushält
Der Token wird im Bereich des Bots im ACLClouds-Dashboard eingegeben, nicht im Code. Das Feld lehnt übrigens einen Token ab, der als Variablenname eingegeben wurde.
- Der Token wird im Dashboard des Bots eingegeben und nicht in die Projektdateien geschrieben.
- Das Feld lehnt einen Variablennamen wie DISCORD_TOKEN an Stelle des Tokens ab, um Kopierfehler zu vermeiden.
- SFTP-Zugang pro Bot auf Port 2222: Der Code wird allein hochgeladen, ohne dass ein Geheimnis hineingehört.
Häufig gestellte Fragen
Darf ich den Token in eine Konfigurationsdatei des Projekts schreiben?
Nein, auch nicht in eine Datei, die harmlos wirkt. Halten Sie ihn in der Umgebung oder im Dashboard und versionieren Sie nur eine Vorlage .env.example ohne Wert.
Ich habe meinen Token aus Versehen veröffentlicht. Was tun?
Setzen Sie ihn sofort im Discord-Entwicklerportal zurück, aktualisieren Sie die Variable am Bot und starten Sie ihn neu. Die Datei zu löschen reicht nicht: Die Git-Historie behält sie.
Ist eine .env-Datei auf dem Server sicher?
Sie sollte nicht mit dem Code hochgeladen werden. Nutzen Sie am Bot lieber die im Dashboard eingegebenen Werte: Eine .env bleibt ein Werkzeug für lokale Tests.