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

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

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

כדי שהשרת יזהה לקוח באמצעות $_SERVER['HTTP_HOST']

מתוזמן נעוץ נעול הועבר תכנות
9 פוסטים 4 כותבים 247 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC מנותק
    chagoldC מנותק
    chagold
    כתב ב נערך לאחרונה על ידי chagold
    #1

    אני עושה מערכת שאוכל לפתוח אותה לכמה לקוחות שלכל אחד יהיה דומיין נפרד. השרת כרגע מזהה את המערכת לפי המשתנה $_SERVER['HTTP_HOST'].

    שאלות:

    1. אני לא יודע מה המנגנון של HTTP. אז האם שייך 'לזייף' דהיינו לפנות לשרת בדומיין X כאשר בפניה מגדירים מידע של דומיין אחר למשתנה $_SERVER['HTTP_HOST']? (אני מאמין שלא, רק רוצה להיות בטוח).

    2. האם צריך / כדאי לעשות עוד הפרדה בתוך השרת שיהיה לכל דומיין דברים נפרדים (אני מעלה אפשרויות: שרת אפאצ'י נפרד לכל דומיין / IP נפרד, או משהו אחר)? וא"כ אז אם אפשר כיוון ל'איך עושים את זה'?

    תודה.

    A תגובה 1 תגובה אחרונה
    0
    • י מנותק
      י מנותק
      יוסף בן שמעון
      כתב ב נערך לאחרונה על ידי
      #2

      בודאי שאפשר לזייף, בעיקרון הבקשה ב HTTP פונה לכתובת IP, וכלול בבקשה header בשם HOST שאומר לשרת לאיזה דומיין הלקוח מעוניין לפנות, והשרת עושה את הסינון שלו לפי ההגדרות שלו.
      אם אתה רוצה לאבטח מידע, אתה חייב להשתמש במערכת אימות ועוגיות אותנטיקה, אין לי מושג איך עושים את זה ב PHP

      תגובה 1 תגובה אחרונה
      3
      • י מנותק
        י מנותק
        יוסף בן שמעון
        כתב ב נערך לאחרונה על ידי
        #3

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

        chagoldC תגובה 1 תגובה אחרונה
        4
        • A מנותק
          A מנותק
          avr416
          השיב לchagold ב נערך לאחרונה על ידי
          #4

          @chagold אמר בכדי שהשרת יזהה לקוח באמצעות $_SERVER['HTTP_HOST']:

          אני עושה מערכת שאוכל לפתוח אותה לכמה לקוחות שלכל אחד יהיה דומיין נפרד. השרת כרגע מזהה את המערכת לפי המשתנה $_SERVER['HTTP_HOST'].
          תודה.

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

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

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

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

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

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

            על שאלה 1 @יוסף-בן-שמעון ענה מצויין.
            על שאלה 2 זה בהחלט אפשרי, מומלץ ע"י ngnix.

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            4
            • chagoldC מנותק
              chagoldC מנותק
              chagold
              השיב ליוסף בן שמעון ב נערך לאחרונה על ידי chagold
              #6

              @יוסף-בן-שמעון עשיתי מערכת של סשנים.
              ולפי מה שאתה אומר, אז אצלי כיון שבעצם הנתונים מתקבלים כמו API, אני יכול לסנן את הדומיין הרלוונטי לפי הheader HOST.

              @dovid שתי שאלות על ngnix:

              1. ענית לשאלה איך אפשר לעשות, או האם אני מרוויח מזה? כי אם כן, מה באמת הרווחתי? (בכ"א אפשר לעקוב אחרי רשימת הכתובות שמפנות לIP שלי כמו ש@יוסף-בן-שמעון כתב). אא"כ כוונתך ע"י הngnix לעשות location לשרתים אחרים?

              2. כדי לעשות location לשרתים אחרים, האם יש אפשרות לעשות את הניתובים ע"י שימוש בסקריפט, או שחייב להיות שכל פעם שיש לקוח חדש אז אצטרך להוסיף קבצים ולעשות ריסטרט לngnix?

              תודה

              תגובה 1 תגובה אחרונה
              0
              • dovidD מחובר
                dovidD מחובר
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #7

                @chagold אני לא מבין בדיוק מה אתה עושה, לכן אני לא יכול לענות לך בדיוק.
                בגדול אם נח לך יישום אחד לכל הלקוחות, אלא שלפי הדומיין אתה רוצה שהיישום יטפל בבקשה, אז אתה לא צריך ngnix (זה סתם תמיד מומלץ אבל לא נוגע לעכשיו) וכפי שאמרת אתה יכול לבדוק את ההידר host.
                (אני מבין שאתה בעצם עושה מה ש@avr416 הציע באפשרות השניה רק שבמקום ללכת לפי משתמשים אתה מתייחס לדומיינים, ו@avr416 שים לב שזה יכול לחסוך מסד של משתמשים גלובלי כי לפי הדומיין מתחברים למסד המתאים בו יש משתמשים רק של אותו לקוח).
                אם אתה רוצה יישום לכל לקוח, כלומר שאם לקוח אחד למשל גורם לשגיאה והיישום נופל אז של הלקוח השני ימשיך לעבוד, אז אתה בעצם מריץ מופעים של יישומים כמספר הלקוחות. היישומים לא יכולים להאזין לפורט 80 כי רק יישום אחד יכול לטפל בפורט נתון, פה בא הnginx ומאפשר לך להאזין בפורט 80 למשל לכלל הלקוחות ולפי דומיין להפנות ליישום (פורט) המתאים בתוך השרת.

                לגבי 2, התשובה היא שכן.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                A תגובה 1 תגובה אחרונה
                5
                • A מנותק
                  A מנותק
                  avr416
                  השיב לdovid ב נערך לאחרונה על ידי
                  #8

                  @dovid אני מבין שזה חוסך את המסד הגלובלי, אם כי בד"כ בלאו הכי הרבה פעמים יש צורך להחזיק מסד כזה בשביל עוד כמה דברים. כגון אם אתה לא רוצה לאפשר לכל המשתמשים את אותם יכולות של התוכנה, אלא רק למי שעשה מנוי לדברים מסוימים. או אם יש לך חבילות לפי שימוש וכדו', ואתה רוצה לדעת כמה הלקוח השתמש. זה דברים שלא היית רוצה להחזיק בDB של הלקוח הספציפי, אלא באחד כללי של כל המערכת.

                  תגובה 1 תגובה אחרונה
                  3
                  • chagoldC מנותק
                    chagoldC מנותק
                    chagold
                    כתב ב נערך לאחרונה על ידי
                    #9

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

                    תגובה 1 תגובה אחרונה
                    0

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

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

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