שימוש במשתני סביבה ב-Node.js
שימוש ב-dotenv
טיפול בסודות ובאסימוני API בצורה בטוחה
מאמר קשור: הגן על האסימונים שלך
בואו נזכיר בקצרה את ההבדל בין secret ל-non-secret.
- 🔒
מפתחות סודייםחייבים להשתמש בשרת מותאם אישית (למשל Node/Express/Heroku) כדי להסתיר (לתעל) בקשות לשירותי API של צד שלישי. - 🌍
מפתחות לא סודייםמתארים מפתחות שניתן לשלוח לדפדפן.
נתמקד בטיפול ב-🔒
מפתחות סודייםבאמצעות משתני סביבה במאמר זה.
סקירה כללית
כדי לגשת בבטחה לסודות בקוד NodeJS שלך:
- החלף מפתחות מקודדים-קשיחים במשתני סביבה. למשל:
process.env.API_SECRET - השתמש בספרייה כמו
dotenvיחד עם קובץ.env. הוסף את הסודות שהיו מקודדים-קשיחים בעבר לקובץ.env. - ודא שיש שורת
.envבקובץ.gitignoreשלך!
אל תיצור קובץ
.envבשרתים פרוסים. השתמש בכלי ניהול משתני הסביבה של שירותי האירוח שלך (למשל Heroku, Netlify, AWS EC2): לדוגמה לוח בקרה או שורת פקודה.
דוגמת קוד
אנחנו הולכים להגדיר מספר קבצים.
.env./db/connection.js./api/users.js
ראשית, התקן את חבילת dotenv.
npm install dotenvלאחר מכן, צור קובץ .env בשורש הפרויקט שלך.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ לעולם אל תבצע commit לקובץ .env.
❌ הימנע מיצירת קובץ .env בשרתים.
בדוק בתיעוד של ספק האירוח שלך כיצד להגדיר משתני סביבה.
כדי לוודא בקלות שלקובץ .gitignore שלך יש שורה עבור .env.
# Automatically update .gitignore# Run in terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# note: no output will printהקובץ ./db/connection.js מספק מופע משותף של pg.Pool. הוא ישמש לשאילתות במסד הנתונים.
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();התיקייה ./api מכילה ממשקים לטבלאות/תצוגות שלך.
הנה דוגמה לקובץ ./api/users.js עבור טבלת users.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- לעולם אל תבצע commit לסודות ה-
.envשלך ל-git! - אל תשתף קבצי
.envבצוות. *
* כל מחשב פיתוח חדש (נייד או שולחני) צריך ליצור מפתחות גישה ואסימונים חדשים.
אם זה לא אפשרי, השתמש בזהירות רבה בשיתוף קובץ .env (במקרים שבהם שירות עלול לבטל את כל המפתחות הישנים, או שיש לך אסימון גישה מוגבל של API בתשלום).
⚠️ חשוב: במידת הצורך, השתמש תמיד בשירות הודעות מאובטח (רצוי עם תמיכה בהודעות שפג תוקפן).
בהצלחה וספר לי אם יש לך שאלות! 🎉