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

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

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

בדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה

מתוזמן נעוץ נעול הועבר תכנות
24 פוסטים 3 כותבים 202 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • E מנותק
    E מנותק
    eido
    כתב נערך לאחרונה על ידי eido
    #1

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

    dovidD תגובה 1 תגובה אחרונה
    0
    • E eido

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

      dovidD מנותק
      dovidD מנותק
      dovid
      ניהול
      כתב נערך לאחרונה על ידי dovid
      #2

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

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

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

        מבחינתי זה נטו בשביל אבטחה.

        איזה מבנה לא יעיל? של העמוד חיצוני שמנתב או זה שיש בדיקות בשניהם?

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

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

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

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

            E מנותק
            E מנותק
            eido
            כתב נערך לאחרונה על ידי eido
            #5

            @dovid לא מכיר תורות מוכנות, אם יש מושגי בסיס שאוכל לחפש אשמח לכמה.
            השיקול שלי הוא, שהקוד מורץ בתור API, ואם כל אחד יכול לגשת לAPI בעצמו, זה יצא שגם אצטרך לתת הרשאות גישה למסד נתונים לכל אחד, לא? זה בעצם הסיבה שמלכתחילה התחלתי עם זה, ניסיתי לגשת ישר לAPI וקיבלתי שגיאה של גישה לא מורשית למסד הנתונים, אז אם זה מגיע דרך עמוד מתווך. א. אף אחד לא יודע מה הנתיב של העמוד שעושה בפועל, וככה לא יצליחו לשחק איתו יותר מידי (כמובן שאם יריצו סריקה על השרת יוכלו למצוא הכל, בכל זאת א"א למנוע הכל), וגם אם כן ימצאו עושים עליו הגבלת גישה רק מהIP של השרת עצמו, כך מונעים התקפות עליו ישירות (ברעיון, לא ניסיתי). ב. הגישה היא מהשרת ולא מהמשתמש, ככה לא צריך לפתוח הרשאות מיותרות.

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

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

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

                ערכתי את ההודעה הקודמת

                לדוגמא, הנה 2 קבצים (חלקיים לא צריך את כל הקוד הארוך).
                זה המתווך -
                main.php
                זה המבצע -
                deleteAds.php

                אני מכיר מחלקות, אבל אני לא רואה איך זה עוזר להפרדת המשתמש מהלוגיקה הפנימית. או שמחלקות בPHP זה שונה מC#?

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

                  אוקי, זה בערך מה שחשבתי, אבל אני לא מבין מה שכתבת פה בכלל (אולי אני עייף ופשוט אקרא שוב למחרת יו"כ):

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

                  אתה יכול לפרט, איך התחלת? מה הכוונה קיבלת שגיאה של גישה לא מורשית? למי תצטרך לתת גישה?

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

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

                    1. אני לא צריך להשתמש ב%, יש למסד נתונים גישה רק מהשרת עצמו.
                    2. יש פחות סיכוי לנזק לשרת, כי הקובץ שהמשתמש מגיע אליו לא יודע או יכול לעשות כלום, אין מצב שמשחילים לי DROP ALL TABLE ושאר מרעין בישין. וכן כשהמשתמש הזדוני מכיר את הקובץ שפועל בשרת ויכול לגיע אליו, לדעתי כבר יש לו רגל בפנים, כשהוא מכיר רק את הקובץ המתווך, הוא צעד אחד אחורה.

                    מקווה שיותר מובן.

                    תגובה 1 תגובה אחרונה
                    1
                    • E מנותק
                      E מנותק
                      eido
                      כתב נערך לאחרונה על ידי eido
                      #10

                      די כמו MVC או Layered Architecture

                      תגובה 1 תגובה אחרונה
                      0
                      • E eido

                        @dovid לא מכיר תורות מוכנות, אם יש מושגי בסיס שאוכל לחפש אשמח לכמה.
                        השיקול שלי הוא, שהקוד מורץ בתור API, ואם כל אחד יכול לגשת לAPI בעצמו, זה יצא שגם אצטרך לתת הרשאות גישה למסד נתונים לכל אחד, לא? זה בעצם הסיבה שמלכתחילה התחלתי עם זה, ניסיתי לגשת ישר לAPI וקיבלתי שגיאה של גישה לא מורשית למסד הנתונים, אז אם זה מגיע דרך עמוד מתווך. א. אף אחד לא יודע מה הנתיב של העמוד שעושה בפועל, וככה לא יצליחו לשחק איתו יותר מידי (כמובן שאם יריצו סריקה על השרת יוכלו למצוא הכל, בכל זאת א"א למנוע הכל), וגם אם כן ימצאו עושים עליו הגבלת גישה רק מהIP של השרת עצמו, כך מונעים התקפות עליו ישירות (ברעיון, לא ניסיתי). ב. הגישה היא מהשרת ולא מהמשתמש, ככה לא צריך לפתוח הרשאות מיותרות.

                        צדיק תמיםצ מנותק
                        צדיק תמיםצ מנותק
                        צדיק תמים
                        כתב נערך לאחרונה על ידי צדיק תמים
                        #11

                        @eido זה נקרא אבטחה באמצעות הסתרה וכדאי להתרגל להימנע מזה באופן גורף כי בדרך כלל התועלת קטנה והנזק גדול שיש תחושת שווא של אבטחה ולא דואגים לאבטחה אמיתית
                        לדוגמה הזרקת SQL לא מגנים על ידי יצירת שכבות מלאכותיות אלא על ידי Prepared Statements (כמו שעשית) ואז אין עניין בכל השלבים (לא מבין מה אתה מתכוון רגל בפנים בגלל שיודעים את שם הקובץ)
                        וגם הסתרה של שם קובץ זה לא הגנה, צריך להוציא אותו ממיקום שבו השרת אינטרנט מריץ או לחסום בקובץ .htaccess

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

                        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                        טיפים

                        E תגובה 1 תגובה אחרונה
                        3
                        • E מנותק
                          E מנותק
                          eido
                          כתב נערך לאחרונה על ידי
                          #12

                          אבל עד כמה שהבנתי זה גם בערך הצורה של MVC או Layered Architecture, לא?

                          צדיק תמיםצ תגובה 1 תגובה אחרונה
                          0
                          • E eido

                            אבל עד כמה שהבנתי זה גם בערך הצורה של MVC או Layered Architecture, לא?

                            צדיק תמיםצ מנותק
                            צדיק תמיםצ מנותק
                            צדיק תמים
                            כתב נערך לאחרונה על ידי צדיק תמים
                            #13

                            @eido לא עושים MVC על ידי שקובץ אחד קורא לקובץ אחר בcurl אלא הפרדה לוגית לקלאסים/פונקציות ואפשר גם חלוקת לוגיקה לקבצים ואז ייבוא עם include
                            אגב ערכתי את התשובה והוספתי התייחסות לשאלה המקורית

                            Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                            טיפים

                            תגובה 1 תגובה אחרונה
                            2
                            • צדיק תמיםצ צדיק תמים

                              @eido זה נקרא אבטחה באמצעות הסתרה וכדאי להתרגל להימנע מזה באופן גורף כי בדרך כלל התועלת קטנה והנזק גדול שיש תחושת שווא של אבטחה ולא דואגים לאבטחה אמיתית
                              לדוגמה הזרקת SQL לא מגנים על ידי יצירת שכבות מלאכותיות אלא על ידי Prepared Statements (כמו שעשית) ואז אין עניין בכל השלבים (לא מבין מה אתה מתכוון רגל בפנים בגלל שיודעים את שם הקובץ)
                              וגם הסתרה של שם קובץ זה לא הגנה, צריך להוציא אותו ממיקום שבו השרת אינטרנט מריץ או לחסום בקובץ .htaccess

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

                              E מנותק
                              E מנותק
                              eido
                              כתב נערך לאחרונה על ידי
                              #14

                              @צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה?:

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

                              השיקול שלי הוא שאם יצליחו להגיע ישירות לקובץ הפנימי, לא תהיה לו שום הגנה.
                              איך מתמודדים עם זה?

                              צדיק תמיםצ תגובה 1 תגובה אחרונה
                              0
                              • E מנותק
                                E מנותק
                                eido
                                כתב נערך לאחרונה על ידי eido
                                #15

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

                                תגובה 1 תגובה אחרונה
                                0
                                • E eido

                                  @צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה?:

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

                                  השיקול שלי הוא שאם יצליחו להגיע ישירות לקובץ הפנימי, לא תהיה לו שום הגנה.
                                  איך מתמודדים עם זה?

                                  צדיק תמיםצ מנותק
                                  צדיק תמיםצ מנותק
                                  צדיק תמים
                                  כתב נערך לאחרונה על ידי
                                  #16

                                  @eido דואגים שהקובץ לא יהיה במיקום ששרת האינטרנט (אפאצ'י לדוגמה) מריץ

                                  Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                                  טיפים

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • E מנותק
                                    E מנותק
                                    eido
                                    כתב נערך לאחרונה על ידי eido
                                    #17

                                    תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?

                                    עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.

                                    צדיק תמיםצ תגובה 1 תגובה אחרונה
                                    0
                                    • E eido

                                      תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?

                                      עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.

                                      צדיק תמיםצ מנותק
                                      צדיק תמיםצ מנותק
                                      צדיק תמים
                                      כתב נערך לאחרונה על ידי
                                      #18

                                      @eido זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2
                                      אבל מה הקשר לערבב גם PHP? אם אתה כותב בNode.js תעשה את הכל שם

                                      Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                                      טיפים

                                      E תגובה 1 תגובה אחרונה
                                      0
                                      • E מנותק
                                        E מנותק
                                        eido
                                        כתב נערך לאחרונה על ידי
                                        #19

                                        היה לי קוד די מוכן בPHP ואת node אני לא מכיר כמעט, העדפתי להמשיך עם PHP

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • צדיק תמיםצ צדיק תמים

                                          @eido זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2
                                          אבל מה הקשר לערבב גם PHP? אם אתה כותב בNode.js תעשה את הכל שם

                                          E מנותק
                                          E מנותק
                                          eido
                                          כתב נערך לאחרונה על ידי
                                          #20

                                          @צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:

                                          זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2

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

                                          כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:

                                          תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?

                                          עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.

                                          ?

                                          צדיק תמיםצ תגובה 1 תגובה אחרונה
                                          0
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


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

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

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