Umgebungsvariablen in NodeJS verwenden
dotenv verwenden
Geheimnisse und API-Token sicher handhaben
Verwandter Artikel: Protect Your Tokens
Kurze Zusammenfassung des Unterschieds zwischen secret und non-secret:
- 🔒
Geheime SchlüsselMÜSSEN einen eigenen Server (z. B. Node/Express/Heroku) verwenden, um Anfragen an API-Dienste Dritter zu verbergen (Proxy). - 🌍
Nicht-geheime Schlüsselbeschreibt Schlüssel, die an den Browser gesendet werden können.
In diesem Artikel konzentrieren wir uns auf den Umgang mit 🔒
Geheimen Schlüsselnmithilfe von Umgebungsvariablen.
Codebeispiele finden Sie unten.
Übersicht
So greifen Sie sicher auf Geheimnisse in Ihrem NodeJS-Code zu:
- Ersetzen Sie hartcodierte Schlüssel durch Umgebungsvariablen, z. B.
process.env.API_SECRET - Verwenden Sie eine Bibliothek wie
dotenvzusammen mit einer.env-Datei. Fügen Sie Ihre zuvor hartcodierten Geheimnisse in die.env-Datei ein. - Prüfen Sie, ob die
.env-Zeile in Ihrer.gitignore-Datei vorhanden ist!
NICHT auf bereitgestellten Servern eine
.env-Datei erstellen. Verwenden Sie das vom Hosting-Service (z. B. Heroku, Netlify, AWS EC2) bereitgestellte Tool zur Verwaltung von Umgebungsvariablen, z. B. Dashboard oder Befehlszeile.
Codebeispiel
Wir definieren einige Dateien.
.env./db/connection.js./api/users.js
Zuerst installieren Sie das Paket dotenv.
npm install dotenvErstellen Sie als Nächstes eine .env-Datei im Stammverzeichnis Ihres Projekts.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ NIEMALS die .env-Datei committen.
❌ Vermeiden Sie das Erstellen von .env auf Servern.
Schlagen Sie in der Dokumentation Ihres Hosting-Anbieters nach, wie Sie Umgebungsvariablen einrichten.
So stellen Sie sicher, dass Ihre .gitignore eine .env-Zeile enthält:
# Automatically update .gitignore# Run in terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# note: no output will printDie Datei ./db/connection.js stellt eine gemeinsame pg.Pool-Instanz bereit. Sie wird zum Abfragen der Datenbank verwendet.
require('dotenv').config(); // ✅ Load .env fileconst pg = require('pg');const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development') console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);// ^^ only for showing debug connection vars
// pg automatically uses PG* env variablesmodule.exports = new pg.Pool();Der Ordner ./api enthält Schnittstellen zu Ihren Tabellen/Views.
Hier ist ein Beispiel für ./api/users.js für die Tabelle users.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- Committen Sie niemals Ihre
.env-Geheimnisse in Git! - Teilen Sie
.env-Dateien nicht im Team. *
* Jeder neue Entwicklungs-Laptop oder -Desktop sollte neue Zugriffsschlüssel und Token generieren.
Wenn dies nicht möglich ist, gehen Sie mit größter Sorgfalt beim Teilen Ihrer .env-Datei vor (in Fällen, in denen ein Dienst alle älteren Schlüssel ungültig machen könnte oder Sie ein begrenztes API-Zugriffstoken haben.)
⚠️ Wichtig: Verwenden Sie im Zweifelsfall immer einen sicheren Nachrichtendienst (vorzugsweise mit Unterstützung für automatisch ablaufende Nachrichten.)
Viel Erfolg und lassen Sie mich wissen, wenn Sie Fragen haben! 🎉