03-07-2006, 02:55
|
|
|
חבר מתאריך: 30.06.06
הודעות: 185
|
|
בעיה עם מחיקת משתנים שנוצרו על ידי register_globals
אני מנסה למחוק את כל המשתנים ש register_globals יצר (שינוי ב php.ini לא מתאים לי במקרה הזה)
אז עשיתי משהו כזה
קוד PHP:
if (ini_get('register_globals'))
foreach($_REQUEST as $key => $value)
if (isset($$key))
unset($$key);
הבעיה היא שאם מישהו יכנס ל
file.php?_GET=asd
זה ימחק לי את כל $_GET
או אם הוא יכנס ל
file.php?mysql_user=asd
זה ימחק את המשתנה הזה
וזה קצת בעייתי.
אז חשבתי לתת לזה רשימה של משתנים
קוד PHP:
if (ini_get('register_globals')) {
$PMS_save_vars=array('PMS_save_vars', 'PMS_conf', 'PMS_conf_error', 'GLOBALS', 'argv', 'argc', '_FILES', '_COOKIE', '_POST', '_GET', '_SERVER', '_ENV', '_SESSION');
foreach($_REQUEST as $key => $value) {
if (isset($$key) && !in_array($key, $PMS_save_vars))
unset($$key);
}
}
פתרון יעיל, אבל לא מושלם
מה שאני כותב אמור להיות משומש בהרבה מקומות, ואני לא יכול לדעת מה כל אחד מהם הגדיר בדיוק, ואני לא אדע לתת רשימה שתהיה נכונה תמיד.
אז חשבתי על
קוד PHP:
if (ini_get('register_globals'))
foreach($_REQUEST as $key => $value)
if (isset($$key) && $$key==$value)
unset($$key);
שזה גם פתרון מאוד נחמד, בודק שיש להם אותו תוכן, מה שלמעשה אמור לבדוק שזה נוצר מה register_globals
הבעיה היא שזה יכול לשמש ל brute forcing, אם יודעים שיש משתנה בשם mysql_user
ינסו להיכנס ל
קוד:
file.php?mysql_user=root
file.php?mysql_user=web
file.php?mysql_user=site
עד שיראו שזה לא מצליח להתחבר לדאטאבייס, ואז הם ידעו שזה לא מצליח בגלל שהמשתנה המקורי מכיל את מה שהם שלחו והוא נמחק.
כנ"ל על הסיסמא
זהו, פה נגמרו לי הרעיונות...
אם יש למישהו רעיון יותר טוב, אני אשמח לשמוע
(נא לא להציע לי לכבות את register_globals - זה לא מתאים במקרה הזה)
נערך לאחרונה ע"י eXeCuT3 בתאריך 03-07-2006 בשעה 02:58.
|