Schutz Ihrer Tokens, API-Schlüssel und Geheimnisse
Öffentlich? Privat? Wat?
Wann sollten Sie Ihre Token schützen?
Die Sicherung von API-Schlüsseln und -Token ist extrem wichtig!
Ein einziger Fehler kann dazu führen, dass Hacker Ihre Server und Daten übernehmen!
Es sollte doch nicht so schwierig sein, zu entscheiden, ob ein bestimmter Token versteckt werden muss – selbst anhand der offiziellen Dokumentation nicht!
Es wird oft noch schlimmer durch den Wortsalat aus verwandten Begriffen, die Sie antreffen werden: Tokens, Schlüssel, Anmeldeinformationen, Geheimnisse, privat und öffentlich.
Lassen Sie uns dies neu strukturieren in geheim und nicht-geheim.
- 🔒
GeheimschlüsselMÜSSEN strikt geheim gehalten werden. Generell sollten sie niemals Ihren privaten Server (oder Dienst – wie Heroku, Netlify oder Travis-CI) verlassen. - 🌍
Nicht-geheime Schlüsselbeschreibt Zeichenketten, die frei geteilt werden können und in Browseranfragen enthalten sein dürfen.
🔒 Geheimschlüssel
** ‼️ Wichtig:** Geheimschlüssel MÜSSEN von Git ignoriert und aus allen Browser-Code-Dateien ausgeschlossen werden. dotenv korrekt einsetzen
Wie erkennen Sie, dass Sie mit einem Geheimschlüssel arbeiten?
👍 Faustregel: Server, die CORS-Fehler zurückgeben, unterstützen keine Browser-Anfragen. Dies deutet stark darauf hin, dass Sie den Dienst über einen Proxy leiten MÜSSEN, als wäre der Schlüssel geheim.
👍 Faustregel: Kostenintensive Dienste sollten (fast) immer über einen Proxy geleitet oder versteckt werden.
👍 Faustregel: Bei einem Schreibvorgang (Dateiupload, Einfügen einer Datenbankzeile) könnten Sie mit Geheimschlüsseln arbeiten.
Use cases & features: Geheimschlüssel
- Langfristige Autorisierung (Anmeldeinformationen, Zugriffs-Token, JSON Web Tokens)
- Kurzfristige Autorisierung (OAuth-Token, Sitzungsspeicher)
- Zugriff auf kostenpflichtige/teure Dienste (für Authentifizierung, Geocodierung, Dateispeicher usw.)
- Private Komponente eines öffentlich-privaten Schlüsselpaars (RECAPTCHA, Stripe, Auth0)
- Dienstanmeldeinformationen (E-Mail/SMTP, LDAP/Verzeichnisdienste)
- Datenverschlüsselung & Integritätsprüfung
Checkliste: Geheimnisse sicher verarbeiten
Schnellübersicht
Führen Sie die folgenden Schritte aus, um Geheimnisse aus Ihrem Code zu eliminieren:
- Ersetzen Sie hartenkodierte Schlüssel durch Umgebungsvariablen. z. B.
process.env.API_SECRET - Nutzen Sie eine Bibliothek wie
dotenvzusammen mit einer.env-Datei. Fügen Sie die zuvor hartenkodierten Geheimnisse in die.env-Datei ein. - Fügen Sie eine
.env-Zeile in Ihre.gitignore-Datei hinzu!
NICHT eine
.env-Datei auf bereitgestellten Servern erstellen. Nutzen Sie stattdessen das von Ihrem Hosting-Anbieter (z. B. Heroku, Netlify, AWS EC2) bereitgestellte Tool zur Verwaltung von Umgebungsvariablen: z. B. Dashboard oder Befehlszeile.
Verwandter Artikel: Sicheres Verwenden von dotenv in NodeJS
🌍 Nicht-geheime Schlüssel
👍 Faustregel: Wenn ein Schlüssel in den Browser gesendet werden muss, entweder als Code oder inline (z. B. über einen <script src="https://my-api/?apiKey=123-abc-456">-Tag), handelt es sich definitiv um einen nicht-geheimen Schlüssel. Ein gängiges Beispiel ist Google Maps.
Einsatzszenarien & Funktionen: Nicht-geheime Schlüssel
- Kurzzeitzugriff (Benutzersitzungs-IDs, JSON Web Tokens)
- Beschränkung des API-Zugriffs nach App/Entwickler (für Authentifizierung, Geocoding usw.)
- Öffentlicher Teil des öffentlichen/privaten Schlüsselpaars (RECAPTCHA, Stripe, Auth0)
- Analyse-IDs
✅ Umgang mit Nicht-Geheimnissen:
Es ist sicher, nicht-geheime (öffentliche) Schlüssel direkt in den Code einzubauen!
Verwenden Sie eine gemeinsam genutzte config.js für Ihre Anwendung, um dies langfristig einfacher zu verwalten.
Beispiel:
module.exports = { googleMapsKey: '123-abc'};const config = require('./config.js');const key = config.googleMapsKey;const src = `//maps.googleapis.com/maps/api/js?key=${key}`;// ...Hinweis: Es gibt weitere Use Cases für Umgebungsvariablen. Einige davon wurden hier nicht behandelt: CI/CD/Tests, Feature-Flags und Laufzeitkonfiguration für spezielle Umgebungen!