הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] ביטול פריצות אבטחה ע"י GET (https://hosts.co.il/forums/showthread.php?t=24101)

BlueNosE 16-06-06 08:10

[PHP] ביטול פריצות אבטחה ע"י GET
 
שלום,
אני עובד על המערכת שלי,
skywar,
ואני צריך את עזרתכם =\

קיצור, יש לי משתנה, בשם gamelist.
עכשיו, אם ניגשים אליו ככה:
http://skyawr.webitem.co.il/index.php?gamelist=null
המשתנה נמחק.
זאת לא בעיה. במשתנה לא נכנס מידע כ"כ קריטי שאני לא יכול לשרוד שלא יראו אותו.
אבלל..
אני מוטרד מזה שמישהו יגש למשתנה יותר קריטי במערכת, ואולי יצליח לפרוץ אותה...
יש משהו להתחמק נגד זה?


תודה רבה למגיבים.

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

בניה 16-06-06 09:02

ב"ה


המשתנה נקרא
ככה:
קוד:

$gamelist
או ככה:
קוד:

$_GET['gamelist']
אם כמו באפשרות הראשונה זה לא בטוח מסוכן כי אם מוגדר בשרת
קוד:

register_globals = Off
אז זה לא מסוכן כי אי אפשר לגשת למשתנה מבחוץ(וככה זה בכל שרת נורמאלי)
ואפשר לבדוק את זה ככה:
קוד:

ini_get('register_globals')
ואם כמו באפשרות השנייה אז זה מידע שאתה מימילא אמור לקבל מהמשתמש אז פשוט תבדוק שאין בזה ערכים מסוכנים.

BlueNosE 16-06-06 13:59

ואני, כמו 90% מהאחרים בעולם, לא על שרת פרטי.
כמו כן, אני לא בעל גישה לקובץ INI לצערי. אחרת העולם היה הרבה יותר שמח.
xD
SOMETHING ELSE?

RS324 16-06-06 14:09

אוקי אז זאת פונקציה שכתבתי עכשיו - לא בדקתי אותה אבל רעיונית היא אמור לעבוד

אני מאמין שיש לך קובץ שנקרא gloabl.php שאתה קורא לו מכל הדפים

אז תדחוף את הפונקציה שם :
PHP קוד:

<?php

function deregister_globals()
{
    
$allowedvars =array(
    
'_GET' => $_GET,
    
'_POST' => $_POST,
    
'_REQUEST' => $_REQUEST,
    
'_COOKIE' => $_COOKIE,
    
'_FILES' => $_FILES,
    
'_SESSION' => $_SESSION
    
);

    foreach (
$GLOBALS AS $key =>$val)
    {
        if (!
in_array($key,$GLOBALS))
        {
            unset(
$GLOBALS['key']);
        }
    }
}


deregister_globals();

?>

עכשיו להסבר :

$allowedvars - זה הערכים שמורשים להשאר לדוגמא GET POST וכאלה אני שמתי שם רק כמה דוגמאות בשביל להמחיש את הרעיון.
כמובן שצריך לבדוק את הקוד ואולי לפתח אותו עוד קצת אבל עקרונית זה אמור לעבוד

תהנה.

BlueNosE 16-06-06 18:23

לא הבנתי איפה אתה משתמש פה בallowedvars... אין בו בכלל שימוש..

אני אנסה אחר כך.. תודה על הניסיון..
אה ד"א ומה קורה אם אני צריך GET?
O.o

MasterNir 16-06-06 20:53

אתה יכול לקבוע את ה-register_globals גם דרך ה-htaccess...

בשביל עוד מידע: www.justfuckinggoogleit.com

BlueNosE 18-06-06 14:09

ציטוט:

נכתב במקור על ידי MasterNir
אתה יכול לקבוע את ה-register_globals גם דרך ה-htaccess...

בשביל עוד מידע: www.justfuckinggoogleit.com

ולמה אתה חושב שאתה מצחיק? =/

miniature 18-06-06 14:11

לא הבנתי למה כשהתוכן של המשתנה הוא NULL הוא יימחק..?

BlueNosE 18-06-06 17:45

תחשוב שאתה יכול לגשת למשתנה $id ב2 צורות
1. $_GET['id']
2. $id
אבל זה מותנה במצב הregister_globals.
המצב האידאלי מבחינת אבטחה הוא off.
אבל אצלי הוא on, וזה יוצר בעיה רצינית באבטחה..


מקורה ככה? P:

RS324 18-06-06 17:51

מצטער פשוט כתבתי את זה דיי מהר ולא בדיוק בדקתי את זה

בבקשה הפונקציה המתוקנת....

PHP קוד:

<?php

function deregister_globals()
{
    
$allowedvars =array('_GET','_POST','_REQUEST','_COOKIE','_FILES' ,'_SESSION');

    foreach (
$GLOBALS AS $key =>$val)
    {
        if (!
in_array($key,$allowedvars))
        {
            unset(
$GLOBALS[$key]);
        }
    }
}


deregister_globals();

?>


בניה 18-06-06 18:40

ב"ה


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

RS324 18-06-06 19:39

ציטוט:

נכתב במקור על ידי בניה
ב"ה


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

הרעיון הוא לא לעקוב אחרי כל המשתנים שקיימים לגבי כל עמוד ועמוד


עלה לי רעיון אחר....

הנה פונקציה נוספת שכתבתי :

PHP קוד:

function unregister()
{
    
    
    foreach (
$_GET AS $key => $val)
    {
        if (isset(
$GLOBALS[$key]))
        {
            unset(
$GLOBALS[$key]);
        }
    }
    


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

עכשיו בשביל לבדוק את הפונקציה נעשה כזה דבר :

נכנס אל : page.php?mydogname=bobo

כש REGISTER GLOBAL מופעל, אז אמור להיות לך משתנה שנקרא $mydogname
אבל עם הפונקציה זה אמור להתבטל...
לכן תעלה את הדף הבא לשרת :

PHP קוד:

<?php
function unregister()
{
    
    
    foreach (
$_GET AS $key => $val)
    {
        if (isset(
$GLOBALS[$key]))
        {
            unset(
$GLOBALS[$key]);
        }
    }
    
}

unregister();

echo 
"my dog name is : $mydogname"

?>

ותנסה עם ה URL שנתתי לך

מקווה שעזרתי.....

miniature 18-06-06 20:06

ציטוט:

נכתב במקור על ידי BlueNosE
תחשוב שאתה יכול לגשת למשתנה $id ב2 צורות
1. $_GET['id']
2. $id
אבל זה מותנה במצב הregister_globals.
המצב האידאלי מבחינת אבטחה הוא off.
אבל אצלי הוא on, וזה יוצר בעיה רצינית באבטחה..


מקורה ככה? P:

הכל אחלה, איך איתך? :D
OFF זה שאפשר $id ?

RS324 18-06-06 20:20

ציטוט:

נכתב במקור על ידי miniature
הכל אחלה, איך איתך? :D
OFF זה שאפשר $id ?

כשזה על ON אז זה הופך את GET[ID] לא $ID


BlueNosE - בבקשה תגיב ותגיד אם זה עבד לך....


כל הזמנים הם GMT +2. הזמן כעת הוא 07:30.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ