$ man how-to/constraints-and-context-engines
אבטחהintermediate
אילוצים ומנועי הקשר
.gitignore, משתני סביבה, והארכיטקטורה ששומרת על הrepo שלך בטוח
CODE
.gitignore: קו ההגנה הראשון שלך
הגדר את ה.gitignore שלך לפני הcommit הראשון. לא אחרי. לפני.
הדברים החיוניים:
*.env ו.env.* - מפתחות API, טוקנים, סיסמאות. מפתח אחד שדלף יכול לעלות אלפים.
clients/ ו-partners/ - שמות אמיתיים, עסקאות, שיחות.
data/ - קבצי CSV וJSON עם כתובות אימייל אמיתיות, שמות חברות, רשימות לידים.
scripts/ - סקריפטי אוטומציה לעתים קרובות מטמיעים מפתחות API או מפנים למערכות פנימיות.
screenshots/ - עלולים לתפוס דאשבורדים רגישים או שמות לקוחות בטאבים של הדפדפן.
.cursor/mcp.json - מכיל את מפתחות הAPI שלך לכל כלי מחובר.
node_modules/ - אלפי קבצי תלויות שלא שייכים לversion control.
בדוק את ה.gitignore שלך עם git status. אם קובץ שאתה מצפה שיהיה מוסתר מופיע בסטטוס, כלל ההסתרה לא עובד. תקן את זה לפני שאתה עושה commit.
PATTERN
משתני סביבה
לעולם אל תשריין מפתחות API בקבצים. השתמש במשתני סביבה.
צור קובץ .env בשורש הפרויקט. הוסף את המפתחות: INSTANTLY_API_KEY=your-key-here. הפנה אליהם בקוד עם process.env.INSTANTLY_API_KEY. קובץ ה.env בgitignore, אז הוא נשאר מקומי.
צור קובץ .env.example (בלי ערכים אמיתיים) שאתה כן עושה לו commit. זה מתעד אילו משתני סביבה המערכת שלך צריכה בלי לחשוף מפתחות אמיתיים. כששותף משכפל את הrepo, הוא רואה .env.example ויודע אילו מפתחות להוסיף.
לפריסות Vercel: הוסף משתני סביבה בדאשבורד של Vercel. האפליקציה הפרוסה קוראת מהסביבה של Vercel. האפליקציה המקומית שלך קוראת מ.env. המפתחות אף פעם לא נוגעים בversion control.
PATTERN
הגנה ברמת תיקייה
מבנה את הrepo שלך כך שלנתונים רגישים יש בית ברור שתמיד בgitignore. Skills, תוכן ותהליכי עבודה בטוחים לשיתוף. לקוחות, שותפים, ייצואי נתונים וסקריפטים עם פרטי גישה - לא.
התבנית: תוכן שניתן לשיתוף (מסגרות, תבניות, פוסטים מפורסמים) חי בתיקיות שנעקבות. תוכן רגיש (נתוני לקוחות, הגדרות API, סקריפטים פנימיים) חי בתיקיות בgitignore. הגבול ברור ונאכף על ידי .gitignore, לא על ידי זיכרון.
לrepo שלי יש גם repo עבודה פרטי (מכיל הכל) וגם repo ציבורי בGitHub (מכיל רק תוכן שניתן לשיתוף). הskill /update-github מריץ סריקת pre-push שבודקת שמות שותפים רגישים באמצעות רשימת חסימה מקומית לפני דחיפה לrepo הציבורי.
PRO TIP
סריקת Pre-Push
.gitignore מונע commits בטעות של תיקיות שלמות. אבל מה עם שם שותף שמחליק להודעת commit או לפוסט בבלוג? סריקת pre-push תופסת את אלה.
הskill /update-github סורק קבצים שנעקבים לתוכן רגיש באמצעות רשימת חסימה של שמות שותפים ולקוחות. הוא מבקר את ה.gitignore כדי לאשר שכל התיקיות הרגישות מוחרגות. הוא בודק הודעות commit לשמות שדלפו. רק אחרי שכל הסריקות עוברות הוא דוחף.
אפשר לבנות גרסה פשוטה יותר עם hook של git pre-push. הhook מריץ סקריפט שמחפש תבניות שאתה מגדיר (שמות חברות, דומיינים של אימייל, תחיליות מפתחות). אם הוא מוצא התאמה, הדחיפה נדחית עם אזהרה. זו רשת ביטחון, לא תחליף להגדרת .gitignore טובה.
FORMULA
אסטרטגיה של ציבורי מול פרטי
שמור שני repos או השתמש בהפרדה מבוססת branches.
אפשרות א' (שני repos): הrepo הפרטי שלך מכיל הכל - skills, תוכן, נתוני שותפים, סקריפטים. הrepo הציבורי שלך הוא תת-קבוצה מנוקה. סקריפט pre-push מוודא ששום דבר רגיש לא חוצה.
אפשרות ב' (מבוסס branches): הbranch הראשי שלך ציבורי. עבודה רגישה מתבצעת בbranches פרטיים שאף פעם לא ממוזגים לmain. זה פשוט יותר אבל מסוכן יותר כי merge אחד שגוי חושף הכל.
אני משתמש באפשרות א'. הrepo הפרטי הוא מערכת ההפעלה המלאה. הrepo הציבורי בGitHub הוא גרסת התצוגה עם מסגרות, תוכן מפורסם ודוגמאות של skills. הskill /update-github מאוטמט את הסנכרון עם סריקת בטיחות. המפתח: הrepo הציבורי אף פעם לא עותק העבודה הראשי. הוא ייצוא מאצר של הrepo הפרטי.
knowledge guide
מדריכים קשורים