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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. אימות משתמשים וממשק ניהול בנוד

אימות משתמשים וממשק ניהול בנוד

מתוזמן נעוץ נעול הועבר תכנות
14 פוסטים 4 כותבים 313 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    השיב לחוקר ב נערך לאחרונה על ידי dovid
    #2

    @חוקר העולם של הזדהות והשראות הוא ותיק ובנוי מאוד. מאוד מומלץ לא לעשות כלום, כי כל דבר שתעשה זה המצאת גלגל על כל החסרונות שיש בזה.
    בא נחלק את מה שכתבת:

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

    ב. שסנים (עונות = היכר לייחודיתו של משתמש על פני בקשות שונות)
    כדי לדעת שהמשתמש כבר נתן שם וסיסמה נכונים הצעת להשתמש בעוגיות או כל היכר אחר המועבד ללקוח. יפה מאוד, זה אכן הדרך. ליתר דיוק, העוגיות.
    בניהול של שסן העלית נקודות נכונות: יש בעיה שלקוח "ינחש" שסנים אחרים. לכן העוגיה חייבת להיות קשקוש ולא מס' רץ (uuid רנדומלי זה אכן נחמד), וכזה קשקוש שבלתי סביר לניחוש בפרק הזמן בה היא בתוקף. ובגלל כל הסלט הזה של: קביעת עוגיה, קביעת תוקף, ניהול טבלת העוגיות ועוד היבטי אבטחה, משתמשים בספריה שעושה את כל זה לגמרי אוטומטית express-session. הספריה הזו ממש שקופה, אתה מחליט על בקשה מסויימת שהמשתמש הזה הוא בלתי נחמד, אז אתה מסמן את req.session.user_dafuk = true, או אם העדפה שלו היא מיון לפי עיר req.session.filterBy = 'city' ואח"כ בכל בקשה אתה פונה למשתנה הזה, ולמרבה הפלא הוא מכיל את המידע שהוצב בבקשות הקודמות, זה כיף!

    ג. הרשאות
    באקספרס יש מושג של middelware וזה אומר שאתה יכול לעבד בקשה (וגם את התשובה החוזרת) בכמה "שכבות", אתה יכול לעשות שכל הבקשות יעברו דרך פוקנציה שבודקת אם המשתמש מחובר ועושה חישובים שונים וכדומה.
    אפשר בצורה הזו בקלות להגביל גישה של משתמש/סוג משתמש על הרבה פונקציות בלי לעשות if בכל קוד וקוד (שדרך זו מאוד מקשה על התחזוקה, ומעלה מאוד את הסיכויים לפשלות אבטחה בגלל ריבוי קוד וריבוי נקודות בדיקה).
    בנוגע למימוש בדיוק לגבי הפרוייקט שלך, קשה לי להציע דרך גם בגלל שאני לא בקיא בו וגם בגלל שאני לא כ"כ בפרקטיקה של זה - ביישומים שלי אין כ"כ הרבה דרגות ואפשרויות. ההרשאות לטעמי לא צריכים להיות פר טבלה וסוג פעולה של קריאה/כתיבה, אלא פשוט פר פעולת לקוח. בקשה X שייכת רק למנהל, אז מוסיפים בה מידלוואר שבודק שיש הרשאות ניהול. אם בבקשה אחת יש אופציה לקבל מידע שונה לפי דרגת הניהול אין מנוס מלכתוב קוד קשיח יותר.

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    תגובה 1 תגובה אחרונה
    9
    • ח מנותק
      ח מנותק
      חוקר
      כתב ב נערך לאחרונה על ידי חוקר
      #3

      @dovid
      ראשית תודה רבה על התגובה המפורטת והארוכה.!

      @dovid אמר באימות משתמשים וממשק ניהול בנוד:

      express-session.

      אם אני מבין נכון (כך היה נדמה לי בניסוי מלמעלה), בכל הפעלה מחדש של השרת/אפליקציה זה מתאפס.
      אני צודק?
      ולכן זה בעייתי בשבילי, ובעיקר בתקופת הבניה, בו אני מאתחל די הרבה את האפליקציה לאחר כל שינוי.

      yossizY תגובה 1 תגובה אחרונה
      1
      • yossizY מנותק
        yossizY מנותק
        yossiz
        השיב לחוקר ב נערך לאחרונה על ידי
        #4

        @חוקר זה רק בברירת מחדל, כי בלי הגדרה אחרת היא שומרת את הסשנים בזכרון. אתה אמור להגדיר בשבילו שמירה ב-DB.
        יש כאן רשימה של ספריות עזר:
        https://github.com/expressjs/session#compatible-session-stores

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        dovidD תגובה 1 תגובה אחרונה
        4
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          השיב לyossiz ב נערך לאחרונה על ידי dovid
          #5

          @חוקר אחת מעשרות האפשרויות שיש בלינק ש@yossiz הביא, זה שמירה בקבצים, השתמשתי בזה פעם:
          https://github.com/valery-barysok/session-file-store

          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
          תגובה 1 תגובה אחרונה
          4
          • ח מנותק
            ח מנותק
            חוקר
            כתב ב נערך לאחרונה על ידי חוקר
            #6

            @dovid אמר באימות משתמשים וממשק ניהול בנוד:

            יש בעיה שלקוח "ינחש" שסנים אחרים

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

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

            yossizY dovidD 2 תגובות תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב לחוקר ב נערך לאחרונה על ידי
              #7

              @חוקר יש הצפנה, express-session מקבלת כפרמטר secret שהוא מפתח ההצפנה:
              https://github.com/expressjs/session#secret

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              ח תגובה 1 תגובה אחרונה
              3
              • ח מנותק
                ח מנותק
                חוקר
                השיב לyossiz ב נערך לאחרונה על ידי
                #8

                @yossiz אמר באימות משתמשים וממשק ניהול בנוד:

                @חוקר יש הצפנה, express-session מקבלת כפרמטר secret שהוא מפתח ההצפנה:

                בשורה אחרונה:
                אם אני משתמש בעוגיות בלבד: חסרונות עלי ליצור טוקן מוצפן קשה לזיוף, עלי לנהל את הגדרות העוגיות, המידע (כל העדפות וכו' שאני שומר עליו) חשוף אצלי הלקוח.
                אם אני משתמש ב express-session, זה מצפין עבורי מראש את העוגיה. (האם עלי ליצור טוקן, או שמספיק לי מזהה הפעלה פנימי שמשייך לי אותו למשתמש הנכון?), הגדרות הניהול הן יותר קלות, שאר המידע אינו נגיש ללקוח.
                ישנו נתון נוסף? כתבתי יבש מידי כנראה..

                yossizY תגובה 1 תגובה אחרונה
                1
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  השיב לחוקר ב נערך לאחרונה על ידי yossiz
                  #9

                  @חוקר לא הבנתי אותך לגמרי.
                  א. מבחינתי אין שאלה בכלל האם להשתמש ב-node-session. ברור שכדאי להשתמש. לא רואה צד אחר.
                  ב.

                  האם עלי ליצור טוקן, או שמספיק לי מזהה הפעלה פנימי שמשייך לי אותו למשתמש הנכון?

                  לא הבנתי את השאלה. node-session עושה עוגייה אחת אצל הלקוח, זה ה-sid (כלומר session id). ה-sid עצמו גם מוצפן. (למה? אני לא יודע, הרי אי אפשר לנחש sid של משתמש אחר, אולי כי ה-sid קצר אז אפשר לעשות מתקפת brute force). כל שאר ה-state שמשוייך לסשן נמצא ב-DB ו-node-session מצמיד אותו אוטומטי לאובייקט שאתה מקבל ב-req.session.
                  כל שעליך לעשות הוא, אחרי שאתה מקבל ומאמת פרטי כניסה, אתה מוסיף לאובייקט הסשן:
                  req.session.useId = xxx
                  ואז בכל בקשה שחייב אימות אתה כותב משהו בסגנון של:

                  const isAuthenticated = (req, res, next) => {
                      if (req.session.userId) {
                        return next();
                      }
                      return res.redirect('/login');
                    }
                  
                  app.get('/profile', isAuthenticated, (req, res) => {
                    // אתה מגיע לפה רק אם אתה מאומת
                  })
                  

                  עבור logout אתה פשוט כותב:

                  req.session.userId = null;
                  

                  כתבתי בקיצור, אם משהו לא מובן תשאל

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

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  תגובה 1 תגובה אחרונה
                  3
                  • dovidD מחובר
                    dovidD מחובר
                    dovid ניהול
                    השיב לחוקר ב נערך לאחרונה על ידי
                    #10

                    @חוקר אמר באימות משתמשים וממשק ניהול בנוד:

                    אם אני מבין הספריה של express-session היא ס"ה להקל על הניהול של העוגיות,

                    לגמרי!

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

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

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

                    אני אכן דיברתי על עוגיה רגילה. עוגיה רגילה זה מאובטח ומצויין...

                    @חוקר אמר באימות משתמשים וממשק ניהול בנוד:

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

                    ממש לא. גם אם אתה מממש לבד הכל בטוח וטוב (אם אתה עושה עם UUID כפי שאמרת בשאלה הפותחת + טבלה בצד שרת שמחזיקה UUID מול מזהה לקוח שלך - אחרי שהוא אימת את עצמו בשם וסיסמה). אתה מפסיד רק שאתה עובד קשה ופה ושם עושה פשלות ויש לך יותר קוד לתחזק.

                    אם אני משתמש ב express-session, זה מצפין עבורי מראש את העוגיה. (האם עלי ליצור טוקן, או שמספיק לי מזהה הפעלה פנימי שמשייך לי אותו למשתמש הנכון?),

                    יש פה אי הבנה. אני מקוה שמה ש@yossiz אמר הסביר לך מספיק, הספריה הזאת לא מתעסקת עם כלום. היא סה"כ דואגת שהאובייקט session שבrequest יישאר זהה לכל הבקשות מאותו משתמש בפרק זמן מוגדר. זהו.
                    את הכניסה בשם וסיסמה ואת "זכירת" איזה משתמש והעדפות צריך לעשות איך שבא לך ולשמור את ה"עולה לדינא" באובייקט session, ובו לבדוק לפי הפעולה מה צריך.
                    אני עייף אז אולי לא תבין אותי.

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    A תגובה 1 תגובה אחרונה
                    3
                    • A מנותק
                      A מנותק
                      avi rz
                      השיב לdovid ב נערך לאחרונה על ידי avi rz
                      #11

                      @dovid אמר באימות משתמשים וממשק ניהול בנוד:

                      את הכניסה בשם וסיסמה ואת "זכירת" איזה משתמש והעדפות צריך לעשות איך שבא לך ולשמור את ה"עולה לדינא" באובייקט session, ובו לבדוק לפי הפעולה מה צריך.

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

                      נ.ב. כמובן חוץ ממה שאמר @yossiz, שכשמקבלים session ריק - בלי user_Id אז צריך להכניס לו user_Id לפי השם משתמש והסיסמא - אם הם נכונים כמובן.

                      dovidD תגובה 1 תגובה אחרונה
                      0
                      • dovidD מחובר
                        dovidD מחובר
                        dovid ניהול
                        השיב לavi rz ב נערך לאחרונה על ידי
                        #12

                        @avi-rz כל הטיפול בעוגיה הוא עושה.

                        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                        תגובה 1 תגובה אחרונה
                        2
                        • A מנותק
                          A מנותק
                          avi rz
                          כתב ב נערך לאחרונה על ידי avi rz
                          #13

                          בעצם ה exspress-session הוא רק למשתמש יחיד?
                          כלומר אם שני אנשים עובדים מאותו מחשב, כל פעם שיחליפו, יצטרכו להכניס שם משתמש וסיסמא?
                          למשל אני עשיתי לבד כזה דבר,
                          כך נראית רשימת החיבורים, כמובן אם אופציה לניתוק החיבור בנפרד או מחיקת השם משתמש.
                          Inkedרשימת חיבורים קיימים_LI.jpg
                          כך זה נשמר בדפדפן,
                          מאוחסן בדפדפן.PNG

                          השאלה אם אני יוכל לעשות את אותו רעיון גם בספרייה הנ"ל.

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מחובר
                            dovidD מחובר
                            dovid ניהול
                            השיב לavi rz ב נערך לאחרונה על ידי
                            #14

                            @avi-rz ניכר משאלותיך שאתה מסתדר לא רע, אבל חסר לך ידע משלים בהבנת ארכיטקטורת הHTTP.
                            אני יותר מאשמח אם תפתח נושא ייעודי לזה, ושם אנסה לתת מדריך זוטא בעניין.
                            כדאי שתסביר בדיוק מה עשית, כדי שעצותיי יהיו טובות יותר מתוך הבנה טובה יותר איפה אתה נמצא.

                            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                            תגובה 1 תגובה אחרונה
                            4

                            בא תתחבר לדף היומי!
                            • התחברות

                            • אין לך חשבון עדיין? הרשמה

                            • התחברו או הירשמו כדי לחפש.
                            • פוסט ראשון
                              פוסט אחרון
                            0
                            • דף הבית
                            • קטגוריות
                            • פוסטים אחרונים
                            • משתמשים
                            • חיפוש
                            • חוקי הפורום