בדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה
-
@eido לא יעיל העובדה שהדף PHP קורא לדף אחר.
אתה לא צריך להיות מקורי באבטחה, תשתדל למצוא תורות מוכנות שעמלו עליהם הרבה. כמעט אפשר לומר שכמה שאתה יותר בנאלי בנושא של הלהיות מאובטח, המצב שלך טוב יותר.
מה לא טוב במה שעשית:
א. ייתרון חלש מאוד. גם דף PHP בודד לא נותן לתוקף גישה ישירה למסד, אלא מאי? הוא יכול לנצל אותו. זה לא באמת משתנה אם מדובר בשרשרת של עשר כלים.
ב. חוסר יעילות. דף PHP שקורא לדף PHP זה שני תהליכים (אם הבנתי נכון וזה מתבצע באמצעות הרצה של PHP עם פרמטר קובץ), קושי בניהול חיי התהליך השני (זה לא בידיים של שרת האינטרנט).
ג. סיבוך. הפשטות זה ייתרון גדול הן בפיתוח והן בתחזוקה.
ד. אבטחה. דוקא כשמקימים גדרות אבטחה מהסוג הזה, מחמיצים חורים עם בעיות אבטחה גדולות מהבעיות המקוריות שניסו למנוע. זה בגלל שלא נותנים את הדעת על כל המשמעות של מה שעושים, למשל אם יש לך בית רגיל אתה יודע שצריך לנעול דלת, אבל אם יש לך שדה מוקשים אתה כבר לא אוחז איפה אפשר להשתחל. -
@eido לא יעיל העובדה שהדף PHP קורא לדף אחר.
אתה לא צריך להיות מקורי באבטחה, תשתדל למצוא תורות מוכנות שעמלו עליהם הרבה. כמעט אפשר לומר שכמה שאתה יותר בנאלי בנושא של הלהיות מאובטח, המצב שלך טוב יותר.
מה לא טוב במה שעשית:
א. ייתרון חלש מאוד. גם דף PHP בודד לא נותן לתוקף גישה ישירה למסד, אלא מאי? הוא יכול לנצל אותו. זה לא באמת משתנה אם מדובר בשרשרת של עשר כלים.
ב. חוסר יעילות. דף PHP שקורא לדף PHP זה שני תהליכים (אם הבנתי נכון וזה מתבצע באמצעות הרצה של PHP עם פרמטר קובץ), קושי בניהול חיי התהליך השני (זה לא בידיים של שרת האינטרנט).
ג. סיבוך. הפשטות זה ייתרון גדול הן בפיתוח והן בתחזוקה.
ד. אבטחה. דוקא כשמקימים גדרות אבטחה מהסוג הזה, מחמיצים חורים עם בעיות אבטחה גדולות מהבעיות המקוריות שניסו למנוע. זה בגלל שלא נותנים את הדעת על כל המשמעות של מה שעושים, למשל אם יש לך בית רגיל אתה יודע שצריך לנעול דלת, אבל אם יש לך שדה מוקשים אתה כבר לא אוחז איפה אפשר להשתחל.@dovid לא מכיר תורות מוכנות, אם יש מושגי בסיס שאוכל לחפש אשמח לכמה.
השיקול שלי הוא, שהקוד מורץ בתור API, ואם כל אחד יכול לגשת לAPI בעצמו, זה יצא שגם אצטרך לתת הרשאות גישה למסד נתונים לכל אחד, לא? זה בעצם הסיבה שמלכתחילה התחלתי עם זה, ניסיתי לגשת ישר לAPI וקיבלתי שגיאה של גישה לא מורשית למסד הנתונים, אז אם זה מגיע דרך עמוד מתווך. א. אף אחד לא יודע מה הנתיב של העמוד שעושה בפועל, וככה לא יצליחו לשחק איתו יותר מידי (כמובן שאם יריצו סריקה על השרת יוכלו למצוא הכל, בכל זאת א"א למנוע הכל), וגם אם כן ימצאו עושים עליו הגבלת גישה רק מהIP של השרת עצמו, כך מונעים התקפות עליו ישירות (ברעיון, לא ניסיתי). ב. הגישה היא מהשרת ולא מהמשתמש, ככה לא צריך לפתוח הרשאות מיותרות. -
אוקי, זה בערך מה שחשבתי, אבל אני לא מבין מה שכתבת פה בכלל (אולי אני עייף ופשוט אקרא שוב למחרת יו"כ):
השיקול שלי הוא, שהקוד מורץ בתור API, ואם כל אחד יכול לגשת לAPI בעצמו, זה יצא שגם אצטרך לתת הרשאות גישה למסד נתונים לכל אחד, לא? זה בעצם הסיבה שמלכתחילה התחלתי עם זה, ניסיתי לגשת ישר לAPI וקיבלתי שגיאה של גישה לא מורשית למסד הנתונים, אז אם זה מגיע דרך עמוד מתווך. א. אף אחד לא יודע מה הנתיב של העמוד שעושה בפועל, וככה לא יצליחו לשחק איתו יותר מידי (כמובן שאם יריצו סריקה על השרת יוכלו למצוא הכל, בכל זאת א"א למנוע הכל), וגם אם כן ימצאו עושים עליו הגבלת גישה רק מהIP של השרת עצמו, כך מונעים התקפות עליו ישירות (ברעיון, לא ניסיתי). ב. הגישה היא מהשרת ולא מהמשתמש, ככה לא צריך לפתוח הרשאות מיותרות.
אתה יכול לפרט, איך התחלת? מה הכוונה קיבלת שגיאה של גישה לא מורשית? למי תצטרך לתת גישה?
-
אנסה להסביר.
בהתחלה (אני מדבר על פרויקט קודם, שממנו התחלתי ככה לעבוד) הקוד היה רק העמוד שתכל'ס מבצע דברים, בדוגמא שלנו העמוד deleteAds.php, כשניסיתי לגשת אליו מהדפדפן כדי להשתמש בו (לדעתי במקור הקובץ שלף מידע מהמסד נתונים) קיבלתי שגיאה, בדיקה העלתה שהשגיאה היא שצריך לתת הרשאות גבוהות לuser (הרי בשביל לגשת למסד נתונים צריך לפתוח user עם סיסמא, לא מספיק רק השם של המסד נתונים), ולהשתמש ב% כדי שיוכלו לגשת למסד נתונים גם מחוץ לשרת.
זה לא מצא חן בעיני אז החלטתי להפריד בין המקום שיש למשתמש קצה גישה אליו למקום שמבצע דברים, כך לדעתי הרווחתי 2 דברים:- אני לא צריך להשתמש ב%, יש למסד נתונים גישה רק מהשרת עצמו.
- יש פחות סיכוי לנזק לשרת, כי הקובץ שהמשתמש מגיע אליו לא יודע או יכול לעשות כלום, אין מצב שמשחילים לי DROP ALL TABLE ושאר מרעין בישין. וכן כשהמשתמש הזדוני מכיר את הקובץ שפועל בשרת ויכול לגיע אליו, לדעתי כבר יש לו רגל בפנים, כשהוא מכיר רק את הקובץ המתווך, הוא צעד אחד אחורה.
מקווה שיותר מובן.
-
@dovid לא מכיר תורות מוכנות, אם יש מושגי בסיס שאוכל לחפש אשמח לכמה.
השיקול שלי הוא, שהקוד מורץ בתור API, ואם כל אחד יכול לגשת לAPI בעצמו, זה יצא שגם אצטרך לתת הרשאות גישה למסד נתונים לכל אחד, לא? זה בעצם הסיבה שמלכתחילה התחלתי עם זה, ניסיתי לגשת ישר לAPI וקיבלתי שגיאה של גישה לא מורשית למסד הנתונים, אז אם זה מגיע דרך עמוד מתווך. א. אף אחד לא יודע מה הנתיב של העמוד שעושה בפועל, וככה לא יצליחו לשחק איתו יותר מידי (כמובן שאם יריצו סריקה על השרת יוכלו למצוא הכל, בכל זאת א"א למנוע הכל), וגם אם כן ימצאו עושים עליו הגבלת גישה רק מהIP של השרת עצמו, כך מונעים התקפות עליו ישירות (ברעיון, לא ניסיתי). ב. הגישה היא מהשרת ולא מהמשתמש, ככה לא צריך לפתוח הרשאות מיותרות.@eido זה נקרא אבטחה באמצעות הסתרה וכדאי להתרגל להימנע מזה באופן גורף כי בדרך כלל התועלת קטנה והנזק גדול שיש תחושת שווא של אבטחה ולא דואגים לאבטחה אמיתית
לדוגמה הזרקת SQL לא מגנים על ידי יצירת שכבות מלאכותיות אלא על ידי Prepared Statements (כמו שעשית) ואז אין עניין בכל השלבים (לא מבין מה אתה מתכוון רגל בפנים בגלל שיודעים את שם הקובץ)
וגם הסתרה של שם קובץ זה לא הגנה, צריך להוציא אותו ממיקום שבו השרת אינטרנט מריץ או לחסום בקובץ .htaccessולגבי השאלה המקורית - מקובל לעשות להיפך, לעשות את הולידציה בנקודת הכניסה של הנתונים ולשמור את קוד העדכון עצמו נקי. בכל מקרה אין עניין לעשות אותה בדיקה בשתי מקומות בקוד
-
@eido זה נקרא אבטחה באמצעות הסתרה וכדאי להתרגל להימנע מזה באופן גורף כי בדרך כלל התועלת קטנה והנזק גדול שיש תחושת שווא של אבטחה ולא דואגים לאבטחה אמיתית
לדוגמה הזרקת SQL לא מגנים על ידי יצירת שכבות מלאכותיות אלא על ידי Prepared Statements (כמו שעשית) ואז אין עניין בכל השלבים (לא מבין מה אתה מתכוון רגל בפנים בגלל שיודעים את שם הקובץ)
וגם הסתרה של שם קובץ זה לא הגנה, צריך להוציא אותו ממיקום שבו השרת אינטרנט מריץ או לחסום בקובץ .htaccessולגבי השאלה המקורית - מקובל לעשות להיפך, לעשות את הולידציה בנקודת הכניסה של הנתונים ולשמור את קוד העדכון עצמו נקי. בכל מקרה אין עניין לעשות אותה בדיקה בשתי מקומות בקוד
@צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה?:
ולגבי השאלה המקורית - מקובל לעשות להיפך, לעשות את הולידציה בנקודת הכניסה של הנתונים ולשמור את קוד העדכון עצמו נקי. בכל מקרה אין עניין לעשות אותה בדיקה בשתי מקומות בקוד
השיקול שלי הוא שאם יצליחו להגיע ישירות לקובץ הפנימי, לא תהיה לו שום הגנה.
איך מתמודדים עם זה? -
@צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה?:
ולגבי השאלה המקורית - מקובל לעשות להיפך, לעשות את הולידציה בנקודת הכניסה של הנתונים ולשמור את קוד העדכון עצמו נקי. בכל מקרה אין עניין לעשות אותה בדיקה בשתי מקומות בקוד
השיקול שלי הוא שאם יצליחו להגיע ישירות לקובץ הפנימי, לא תהיה לו שום הגנה.
איך מתמודדים עם זה? -
תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?
עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.
-
@eido זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2
אבל מה הקשר לערבב גם PHP? אם אתה כותב בNode.js תעשה את הכל שם@צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:
זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2
הוא יותר טוב בגלל האסינכורניות שלו, לעומת PHP שזה דיכאון אם צריך תהליך מתמשך של קבלת נתונים ועיבודם.
כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:
תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?
עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.
?
-
@צדיק-תמים כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:
זה לא ש Node.js מתקשר יותר טוב אלא שיש את הספריה yemot-router2
הוא יותר טוב בגלל האסינכורניות שלו, לעומת PHP שזה דיכאון אם צריך תהליך מתמשך של קבלת נתונים ועיבודם.
כתב בבדיקת קלט בשני עמודים שהאחד מעביר ארגומנטים לשני - האם כפולה? וצורת עובדה נכונה:
תודה, התכוונתי מבחינת הMVC וכו', איך עושים את ההפרדה?
עוד פרט, החלק של הPHP זה הליבה הוא מחזיר תשובות גולמיות, מה שיתקשר איתו ויעבד את הנתונים זה node.js, הבנתי שהוא מתקשר טוב עם ימות המשיח.
?
@eido כל עוד אתה לא צריך לטפל בסקייל ענק ולא משתמש בספריה הנ"ל מה זה משנה לך אם הוא אסינכרוני או לא? השרת אינטרנט מריץ תהליך נפרד לכל בקשה
לגבי MVC תפתח נושא חדש, איך עושים MVC נכון. אבל בקצרה אם יש לך קלאס שמייצג את האובייקט (או ORM) והפונקציות שלו נוגעות בדאטהבייס, פונקציה שמפרמטת את מבנה התשובה ופונקציה של הלוגיקה, יש לך MVC -
אני לא יודע מה זה סקייל, אבל זה הולך משהו כמו (אנימתעלם מהלחיצה, רק מה שהמערכת אומרת):
בחר עיר מתוך רשימה -> ירושלים, לאישור הקש 1 (עד כאן הכל טוב, שורה אחת בימות המשיח)
בחר שכונה -> גבעת מרדכי, לאישור הקש 1 (כאן כבר מתחיל להסתבך, א"א להגדיר מראש וגם לא דרך השרת, וגם הבקשת אישור מסבכת). -> רחוב (כנ"ל ואפילו קצת יותר) ככה מספר, קומה מספר חדריםואחרי הכל השמעת המודעה ואפשרות בחירה של חלק לתיקון שבו כל הסרט מתחיל מחדש.
בקיצור חתיכת כאב ראש בPHP -
אני לא יודע מה זה סקייל, אבל זה הולך משהו כמו (אנימתעלם מהלחיצה, רק מה שהמערכת אומרת):
בחר עיר מתוך רשימה -> ירושלים, לאישור הקש 1 (עד כאן הכל טוב, שורה אחת בימות המשיח)
בחר שכונה -> גבעת מרדכי, לאישור הקש 1 (כאן כבר מתחיל להסתבך, א"א להגדיר מראש וגם לא דרך השרת, וגם הבקשת אישור מסבכת). -> רחוב (כנ"ל ואפילו קצת יותר) ככה מספר, קומה מספר חדריםואחרי הכל השמעת המודעה ואפשרות בחירה של חלק לתיקון שבו כל הסרט מתחיל מחדש.
בקיצור חתיכת כאב ראש בPHP