PracticU

הסבר על App Secrets

בלי כתוביותעם כתוביות
PracticU › קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט › הסבר על App Secrets
מילון מושגים:
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
GUID - מזהה ייחודי גלובלי: מספר ארוך שנוצר כך שהסיכוי לכפילות שלו זניח, ומשמש לזיהוי אובייקטים.
ניהול גרסאות - מערכת שעוקבת אחר שינויים בקבצים ובקוד לאורך זמן ומאפשרת לחזור לגרסאות קודמות ולעבוד במשותף.
ריפוזיטורי - מאגר שמרכז את קוד המקור של פרויקט ואת היסטוריית השינויים שלו, לרוב מנוהל ב-Git.
Git - מערכת מבוזרת לניהול גרסאות של קוד, שעוקבת אחר שינויים ומאפשרת עבודה משותפת בענפים.
Entity Framework - ספריית מיקרוסופט שממפה בין אובייקטים בקוד לבין טבלאות במסד נתונים, ומאפשרת לעבוד עם הנתונים בלי לכתוב SQL ישיר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.

הסבר על App Secrets
מידע רגיש כמו סיסמאות, מפתחות ו-Connection String לא אמור לשבת בקבצי הפרויקט. ההרצאה מסבירה מה זה App Secrets, איפה הם נשמרים ולמה הם מונעים דליפה למערכות כמו GitHub.
איך זה עובד
1. מה זה: App Secrets (Application Secrets) הם קובץ JSON שמכיל מידע רגיש של האפליקציה. כל פריט מיוצג כזוג key ו-value.
2. איפה הקובץ יושב: במחשב הפיתוח, מחוץ לפרויקט, בנתיב AppData\Roaming\Microsoft\UserSecrets של המשתמש, בקובץ בשם secrets.json. שם התיקייה הוא ה-UserSecretID.
3. הקשר לפרויקט: ה-UserSecretID הוא GUID (או UUID) באורך 36 תווים. הוא נשמר ב-Project File של הפרויקט ומזהה את הפרויקט.
4. הבעיה בלי App Secrets: מידע רגיש שנמצא בקבצי הפרויקט עולה יחד איתם למערכות ניהול גרסאות כמו GitHub או GitLab. ריפוזיטורי פרטי יכול להיפרץ, ולפעמים שוכחים להגדיר אותו כפרטי. יש גם טכניקות פריצה שמחפשות סיסמאות במערכות האלה.
5. למה לא מספיק קובץ ב-appsettings עם git ignore: זו פעולה נכונה, אבל מתכנת עלול לא להגדיר את הקובץ. בנוסף, פרסום ישיר מ-GitHub לפרודקשן יכול להעלות את המידע.
6. הפתרון: במהלך הפיתוח לא שמים מידע רגיש בקבצי הפרויקט. הוא נשאר בקובץ שמחוץ לפרויקט, והפרויקט קורא אותו מקומית. בהעלאה ל-GitHub או לפרודקשן הוא לא עולה, ובפרודקשן מתקינים את הסודות ביוזמה, בפקודה פשוטה שתוצג בהמשך.
הרצאה זו היא הקדמה תיאורטית. ההגדרה בפועל בפרויקט ה-Entity Framework נעשית בהרצאות הבאות.
אחרי ההרצאה אפשר להסביר למה מפתחים משאירים סיסמאות מחוץ לפרויקט ואיך זה מצמצם את הסיכון שהן יגיעו למערכות ביניים.
השיעור הבא בקורס: יצירת ConnectionString ב-App Secret

פרקי ההרצאה: הסבר על App Secrets

  1. 00:00

    מהו App Secrets

  2. 00:40

    מיקום הקובץ מחוץ לפרויקט

  3. 01:42

    תהליך העלאת פרויקט לסורס קונטרול

  4. 02:59

    הסיכון בדליפת מידע רגיש

  5. 03:55

    מדוע gitignore אינו מספיק

  6. 04:38

    פרסום לפרודקשן והפתרון

תמלול ההרצאה: הסבר על App Secrets

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על App Secrets» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אנחנו מגיעים לנושא קצר ומאוד מעניין בתחום ה-Security. הנושא הזה נקרא App Secrets, כלומר Application Secrets, או סודות האפליקציה.

  2. 00:13

    בואו נבין מה זה App Secrets. App Secrets זה פשוט כובד ג'ייסון שמיועד להכיל מידע רגיש שהאפליקציה משתמשת איתו, כמו סיסמאות, מפתחות, Connection String לדוגמה, כי יש בה סיסמאות ונתונים רגישים כמו שם דאטאבייס וכדומה.

  3. 00:33

    כל אייטם כזה שהוא מידע רגיש, הוא מיוצג בתוך קובץ ה-Jethon על ידי Key Value, זוגות של Key Value Pair. הקובץ הזה נמצא במכונה, אם אני כרגע במחשב הפיתוח אז אני נמצא בלפטופ שלי, אז הוא נמצא איפשהו במחשב, בנתיב מחוץ לפרויקט ולא קשור בכלל לפרויקט.

  4. 00:58

    בווינדאוז זה ממוקם בנתיב הזה. יוזר, ויש לנו את היוזר של המחשב. אפ דאטה, רומינג, מייקרוסופט, יוזר סיקרטס. זה נקרא יוזר סיקרטס כי זה ספציפית ליוזר. יש לנו פה איזשהו קוד, ואף וכו' בג'ייסון נקרא secrets.json.

  5. 01:19

    הקוד הזה, UserSecretID, זה פשוט גויד. Global Unique Identifier, לפעמים זה נקרא UUID, Universal Unique Identifier זה פשוט מכרוזת ארוכה כזאת של 36 תווים ייחודית שמייצגת את הפרויקט ונמצאת בתוך קובץ שנקרא Project File בתוך הפרויקט שלנו אנחנו עוד מעט נראה מה זה בדיוק הקובץ הזה בואו נחשוב רגע על כל התהליך של המתכנת שהוא בונה מערכת ומעלה

  6. 01:49

    אותה לאוויר קודם כל הוא מתכנת אצלו במחשב יש לו מחשב הלפטופ האישי שלו או המחשב הנייח בעבודה שם יש לו את כל הפרויקט עם כל הקבצים של הפרויקט ויש מגוון קבצים בפרויקט בוא נניח שאותו מתכנת מכניס את הסיסמה לדאטאבייס או את הקונקשן סטרינג באחד מהקבצים של הפרויקט ברור שהפרויקט צריך את המידע הזה אז הפרויקט עובד לו והכל טוב נכון

  7. 02:17

    להיום הדבר הנכון לבצע בפרויקטים זה להשתמש באיזשהו ריפוזיטורי של סורס קונטרול כמו גיטהאב גיטלאב יש מגוון ריפוזיטוריז כאלה שבעצם מאפשרים למתכנת לשמור את כל קבצי הפרויקט במערכת ניהול גרסאות כאלה יש לזה המון יתרונות הוא מנהל את הגרסאות של הקוד אני יכול לחזור אחורה לגרסה ישנה יותר ולשלוף ממנה איזשהו קוד ישן אני יכול

  8. 02:46

    לשתף את המערכת שלי בין מתכנתים כל המתכנת במערכת באפליקציה יכול ללכת ולהוריד את הפרויקט ולעבוד עליו ולהחזיר אותו לאותו סורס קונטרול. כאשר המתכנת מעלה את זה לסורס קונטרול, הוא כמובן מעלה את זה עם המידע הרגיש, והמידע הרגיש כבר לא נמצא רק אצלו במחשב, הוא נמצא כבר ב-Gitub.

  9. 03:07

    אתם יכולים להגיד, אוקיי, אבל ריפוזיטורי, המאגר הזה ב-Gitub יכול להיות שהוא פרייבט ונגיש רק למתכנתים של המערכת, של החברה, זה נכון, אבל יש המון מקרים שהמידע הזה נפרץ, בין אם הוא פרטי בין אם הוא ציבורי המון פעמים שוכחים לעשות ריפוזיטורי

  10. 03:28

    פרייבט יש ממש טכניקות פריצה שעושות טרגטינג על גיטהאב וגיטלאב וכל מיני מערכות של סורס קונטרול בשביל לחפש קודים וסיסמאות בתוכם אנחנו בשום אופן לא רוצים סיסמאות מפתחות מידע רגיש שיעלה לכל המערכות האלה של הסורס קונטרול אז אתם יכולים להגיד טוב מה הבעיה בוא נשים את המידע הזה בקובץ כמו שהיה לנו את המחוז את קונקשן סטרינג שזה סוג

  11. 03:55

    של מידע רגיש בתוך אפ סטינגס וניתן הוראה בתהליך ההעלאה לגיט להתעלם מהקובץ הזה. זה גם נכון וזה כמובן הדבר הנכון לעשות אבל עדיין יכול להיות שיש איזה שהוא מתכנת שלא יעשה את זה שיתעלם מזה שלא יגדיר לעצמו את אותו גיט איגנור קובץ.

  12. 04:19

    עודות גיט איגנור שגורם לזה שקבצים מסוימים לא יעלו זה לא הכי הכי סייף שיש למרות שזה משהו שדי חובה לעשות בוא נניח שיש מידע רגיש הוא כן עלה לגיטהאב דרך גיטהאב אנחנו הרבה פעמים מפבלשים את המערכת ישירות מגיטהאב זה עולה לאוויר זה טכניקה שהרבה פעמים מבצעים גיטהאב מפבלשת ואז המידע כן נמצא בפרודקשן שכמובן הוא אמור להיות בפרודקשן אותו מידע רגיש יכול להיות שבפרודקשן גם הסיסמה יכולה

  13. 04:51

    להיות אחרת, זה כמובן, אבל עדיין יש פה את המידע הזה. כאן אנחנו נתקלים בבעיה שהמידע יכול לזלוג למערכות כמו GitHub או Source Control אחרים.

  14. 05:02

    מה הפתרון? AppSecrets אומר דבר כזה, מראש כאשר אנחנו מפתחים את הפרויקט שלנו,

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: שימוש ב-Stored Procedure - ב-Entity Framework Core

ההרצאה הבאה: יצירת ConnectionString - ב-App Secret

הרצאות קשורות מקורסים אחרים

  • הסבר על Azure App Service
  • The App Chooser
  • App Engine - Serverless - חלק 1
  • Build .NET app on Docker

קורסים נוספים במסלול

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio