הגנה על הטוקנים, מפתחות ה-API והסודות שלך
ציבורי? פרטי? מה?
מתי להגן על הטוקנים שלך?
אבטחת מפתחות API וטוקנים היא קריטית ביותר!
טעות אחת עלולה להוביל לאובדן שליטה על השרת והנתונים שלך להאקרים!
לא אמור להיות כל כך קשה לקבוע אם טוקן מסוים חייב להיות מוסתר – אפילו על סמך תיעוד רשמי!
לעתים קרובות זה מחמיר בגלל מרק המונחים הקשורים שתפגוש: טוקנים, מפתחות, אישורים, סודות, פרטיים ו_ציבוריים_.
בוא נמסגר מחדש את זה בין סודי ללא-סודי.
- 🔒
מפתחות סודייםחייבים להישמר מוסתרים. באופן כללי הם לעולם לא צריכים לעזוב את השרת הפרטי שלך (או שירות – כמו heroku, netlify או travis-ci). - 🌍
מפתחות לא-סודייםמתאר מחרוזות שניתן לשתף בחופשיות ולכלול בבקשות דפדפן.
🔒 מפתחות סודיים
** ‼️ חשוב:** מפתחות סודיים חייבים להיות מתעלמים על ידי Git וגם מושמטים מכל קוד דפדפן. כיצד להשתמש ב-dotenv
איך תדע מתי אתה מתמודד עם מפתח סודי?
👍 כלל אצבע: שרתים שמחזירים שגיאות CORS חסרים תמיכת דפדפן. זה מצביע חזק על כך שאתה חייב לפרוקסי את השירות, להתייחס אליו כאילו הוא סודי.
👍 כלל אצבע: שירותים יקרים צריכים (כמעט) תמיד להיות מפרוקסיים או מוסתרים.
👍 כלל אצבע: אם אתה מבצע פעולת כתיבה (העלאת קובץ, הוספת שורה למסד נתונים), ייתכן שאתה מתמודד עם מפתחות סודיים.
שימושים ותכונות: מפתחות סודיים
- הרשאה לטווח ארוך (אישורי גישה, אסימוני גישה, JSON Web Tokens)
- הרשאה לטווח קצר (אסימוני OAuth, אחסון הפעלות)
- גישה לשירותים בתשלום/יקרים (לאימות, גיאוקודינג, אחסון קבצים וכו’)
- החלק הפרטי של זוג ציבורי/פרטי (RECAPTCHA, Stripe, Auth0)
- אישורי שירות (דואר אלקטרוני/SMTP, שירותי ספריות/LDAP)
- הצפנת נתונים ובדיקת שלמות
רשימת משימות: טיפול בטוח במפתחות סודיים
סקירה מהירה
בצע את השלבים הבאים כדי להיפטר ממפתחות סודיים בקוד שלך:
- החלף מפתחות מוקשים בקוד במשתני סביבה. לדוגמה:
process.env.API_SECRET - השתמש בספרייה כמו
dotenvיחד עם קובץ.env. הוסף את המפתחות הסודיים שהיו מוקשים בקוד לקובץ.env. - הוסף שורה עם
.envבקובץ.gitignoreשלך!
אל תיצור קובץ
.envבשרתים פרוסים. השתמש בכלי ניהול משתני הסביבה שמספק שירות האירוח שלך (למשל Heroku, Netlify, AWS EC2): לדוגמה לוח הבקרה או שורת הפקודה.
מאמר קשור: שימוש מאובטח ב-dotenv ב-NodeJS
🌍 מפתחות לא סודיים
👍 כלל אצבע: בכל פעם שמפתח חייב להישלח לדפדפן בקוד או בתוך השורה (למשל דרך תג <script src="https://my-api/?apiKey=123-abc-456">), זה בהחלט לא סודי. דוגמה נפוצה היא Google Maps.
מקרי שימוש ותכונות: מפתחות לא סודיים
- גישה לטווח קצר (מזהי הפעלת משתמש, JSON Web Tokens)
- הגבלת גישת API לפי אפליקציה/מפתח (לאימות, קידוד גיאוגרפי וכו’)
- חלק ציבורי של זוג ציבורי/פרטי (RECAPTCHA, Stripe, Auth0)
- מזהי אנליטיקס
✅ טיפול במפתחות לא סודיים:
זה בטוח לקודד מפתחות לא סודיים (ציבוריים) בקוד!
הקל על הניהול לטווח ארוך עם קובץ config.js משותף לאפליקציה שלך.
דוגמה:
module.exports = { googleMapsKey: '123-abc'};const config = require('./config.js');const key = config.googleMapsKey;const src = `//maps.googleapis.com/maps/api/js?key=${key}`;// ...הערה: ישנם מקרי שימוש נוספים למשתני סביבה. כמה שלא כיסיתי: CI/CD/בדיקות, דגלי תכונה, ותצורת זמן ריצה עבור סביבות מיוחדות!