![]() |
[טיפ] איך לדעת שה ACT שהכניסו הוא תקין
שלום,
שמתי לב צל הרבה מתכנתים פה, שהם משתמשים בשיטה לא הכי יעילה בשביל לבדוק אם ה ACT תקין. מה שהם עושים זה לעשות תנאי IF ולבדוק כל פעם ב OR אם ה ACT תקין. למשל: PHP קוד:
וכל פעם שרוצים להוסיף ACT חדש צריך לעדכן את הדף. אז אני מראה לכם טיפ קטן שמצאתי, שיכול לעזור לכם: PHP קוד:
בשורה ראשונה אנחנו שולפים את ה ACT שלנו דרך ה GET, כרגיל. שורה שניה (תנאי ה IF), זה פשוט למדי, אנחנו בודקים אם לא ניתן לעשות include ל ACT, אם לא ניתן מציגים שגיאה.. אם כן ניתן, זה פשוט עושה Include אוטומטית. הערה: שמתי לפני ה include את התו "@" על מנת "להשתיק" את ה include במידה ולא ניתן לעשות include ל ACT. אופן שימוש: עכשיו כל דף שאתם מעוניינים שיהיה בתוך ה ACT, מכניסים אותה לתיקיה pages. ניתן לשפץ קצת את הקוד, ולעשות שרק דפים שמתחילים ב page_ יהיו בתוך ה ACT, ככה למשל: PHP קוד:
תהנו |קורץ| |
וואלה תודה רעיון נחמד :)
|
PHP קוד:
קוד:
bla.php?act=../../../../usr/home/someuser/somedomain.com/public_html/index לפי דעתי זו לא דרך חכמה לבנות סקריפט שמשתמש הקצה הוא הקובע איזה קובץ הוא יקבל, צריך להכין רשימה קבוע מראש של קבצים. |
ציטוט:
דבר שני, incldue לא יכול לגשת לתיקיות שאתה לא יכול, וגם לא יכול להוסיף דפים מחוץ לתיקיית ה public_html. |
אני מעדיף יותר להשתמש ב-readdir כדי למפות את כל הקבצים שנמצאים אצלי ואיתם אני משתמש ב-$_GET, ואז ליצור איתם switch, שמתעדכן לפי הקובץ, פשוט וקל. יש כאלה שלא בונים עמודים, אלא קוראים לפונקציות מתוך switch או if, elseif, else או כל שיטה אחרת שעולה בדעתכם.
אם תרצו, אני יעבוד על זה עוד מעט, נעשה לכם משהו פשוט עם readdir ו-switch. |
ציטוט:
בכל מקרה, אני אישית בניתי איזה מערכת עם אבטחה חשובה ותחזוקה מהירה, והייתי צריך לעשות משהו דומה לחלקים גדולים, אז עשיתי משהו כזה: PHP קוד:
|
למה לא להשתמש ב SWITCH ? הכי פשוט..
לתת לו מספר קייסים אפשריים...אם לא נתפס באחד מהם אז זה הולך ל DEAFULT ככה שאין שום דבר ושום בעיה של אבטחה... |
נו זה הקטע,
אבל אם יש לך מלא עמודים? כל פעם תוסיף קייס? לא הכי יעיל... |
ציטוט:
אבל נעזוב את זה... אם כבר אתה משתמש בדרך שלך המינימום שלפחות אתה יכול לעשות זה לבדוק אם הקובץ קיים.... |
ציטוט:
כל שאר האלטרנטיבות פשוט לא יעילות. ולמה להשתמש בשיטה הזו אי-פעם בכלל? של ה INCLUDEים. מיותר. יש יותר מדי אופציות אחרות יעילות ואפילו עדיפות מבחינת אופטימיזציה |
עוד רעיון חמוד,
נכון שהACT הוא בדר"כ Id מהמסד והId לא יכול להיות אפס. תחשבו על זה ערך מספרי של טקסט זה 0.(זה יכול לפתור בעיות עם משהו מכניס בACT מחרוזת) אין רשומה כזה 0 גם. מה עושים, פתרון :P PHP קוד:
|
ציטוט:
Include-ים מיותרים? מה נראה לך שב- Switch עושים? Switch אולי יותר בטוח, ממש לא יותר מהיר וקשה לתחזוק, אם אתה רוצה משהו יותר נורמאלי תוציא מערך ממסד נתונים שמכיל את כל ה- ACT-ים ה"מותרים" ותבדוק עם ה- act שקיבלת מ- get נמצא במערך... |
ציטוט:
לא עדיף פשוט לעבוד נטו עם מסד? או במקרה הכי גרוע ובא לי להשקיע עוד דקה ולעבוד עם MOD REWRITE |
טוב אני מתנצל שחשבתי שאפשר להשתמש ב-readdir ו-switch על מנת לשלוף קבצים עם $_GET באופן אוטומטי, טעות שלי. מתנצל.
|
ציטוט:
אתה יודע מה? הנה קוד שאני מביא לך ותמצא לו פירצה: PHP קוד:
תמצא חור אבטחה, אני יתקן, תמצא עוד אחד, אני יתקן... |
ציטוט:
אבל נדלק על הקטע הזה... מה הרעיון פה... בכל מקרה אתה צריך לכתוב את כל ה ACT האפשריים - אז פשוט תדחוף את זה ב SWITCH מבחינה של יעילות זה גם לא בדיוק יותר יעיל מה SWITCH הפשוט אתה מושך מהמסד. יוצר מערך ואחרי זה אתה מחפש בכל המערך עבור הערך. אהה וגם לא טיפלת במקרה שה ACT לא מורשה...אין לך שום דבר מוגדר כ DEAFULT.... |
ציטוט:
אני לא אמרתי שזה יותר יעיל, אמרתי שזה יותר קל לתחזוק, והבעיה ב- Switch זה לתחזק אותו, כשזה נמצא במסד נתונים יותר קל, ואפשר גם להוסיף עוד כל מיני דברים נחמדים כמו הרשאות, וזה למה אני חושב שזה עדיף מ- Switch. |
לא ממש יעיל מה שעשית, עדיף switch, ואגב, "להשתיק" את הinclude? מה זה אמור להגיד למשתמשים שיקראו את זה? פשוט, התו הזה, הוא בעצם מקביל למספר פונקציות שקיימות כמו error_reporting וכו', ובמקרה של ארור, הוא לא מציג אותו, השוני פה שזה רק לפונקצייה של האינקלוד.
:) |
ציטוט:
רוב השרתים רצים עם mod_php, ז"א כל סקריפטי הPHP רצים תחת היוזר שהapache רץ תחתיו www או apache או כל שטות אחרת, כדי שהסקריפטים של כל היוזרים יעבדו, הסקריפטים הם בד"כ ב777 (ז"א קריא ע"י others). שזאת פירצה בפני עצמה. PHP קוד:
וככה זה ברוב ה"חברות". |
למה לא לבנות מערך עם שמות של עמודים קיימים,
[ או לקלוט את העמודים מתוך המסד למערך ] ואז כשמקבלים משהו, לבדוק אם הוא קיים במערך, אם כן אז להציג, אם לא אז לשמור פרטים לטיפול |winky| עריכה: אני רואה שמישהו כבר הציעה את זה :) |
ציטוט:
opendir וכו' מדבר אלייך או שגם את זה אתה עוקף בשניה? :) למה להכליל את "החברות" פה, זה שהם קנו DA ובטוחים שהם מאובטחים זה משו אחד אבל להכליל את כל השאר זה מעליב ------ בכל אופן מר נדב המתכנת הדגול, לא עשית משהו יותר יעיל מ ה SWITCH שאני בכלל נגדו, אבל אם מתעקשים על ACT בצורה כזו עם אינקלודים וכו' אז שיבושם להם |
ציטוט:
זה פשוט יותר קל לתחזוקה, וזאת הבעיה הגדולה של Switch... ואני לא ממש מבין על מה אתה מדבר, שאתה עושה Switch, אתה לא עושה Include? מה אתה כן עושה? בנוסף, אתה אמרת שאתה בכלל נגד Switch, מה אתה כן מציע? |
אני הצלחתי לבנות משהו פשוט עם foreach וכמה תנאים פשוטים, שהמשתמש שולף את הקובץ בצורה מאובטחת לחלוטין - זה חוסם כתובות, או דפדוף בתיקיות באמצעות ..\ או /.. וכל שיטה אחרת :P
EDIT שכחתי לציין, זה שולף אוטומטית עם $_GET, בלי צורך לעדכן את קובץ השליפה. צריך ליטוש אחרון וזהו. |
ציטוט:
SWITCH נוח כתחלופה למספר רב של IFים למה לי לעבוד index.php?page=register ולא כ register.php ? |
ציטוט:
ובכל אופן, safe mode וopendir לא נעקפים בשניה, לא בPHP לפחות, אבל רוב החברות גם נותנות גישה להרצת CGI, מה שהופך את הנ"ל למיותרים. הרי אם יש לי יוזר בשרת כלשהו, כל מה שאני צריך לעשות בשביל לגנוב למישהו את הקוד, זה רק לדעת מה היוזר שלו, והדומיין. ואז לעשות איזה bla.cgi קוד:
#!/bin/bash וכן, גם על זה אפשר להתגבר עם suexec. אבל לדעתי, מראש, רצוי שסקריפטים (PHP ודומייהם) ירוצו תחת היוזר שיצר אותם, ולא יוזר אחד, כמו apache, www, httpd וכו'. |
ציטוט:
|
נחמד
אבל אני משתמש ב הרבה יותר יעיל וטוב PHP קוד:
|
כל הזמנים הם GMT +2. הזמן כעת הוא 01:35. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ