[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Стандарты защиты.
TMake
Помогите пожалуйста я не пойму как фильтровать URL т.е. как уберечся от такого
http://life/index.php?content=../../index.php



Спустя 9 минут, 49 секунд (7.04.2009 - 14:32) FatCat написал(а):
А чем оно страшно?

Спустя 10 минут, 19 секунд (7.04.2009 - 14:42) stepan написал(а):
да вот мне указали на такое у, меня есть сайт www.life-beznarkot.tu2.ru
если войти вот так www.life-beznarkot.tu2.ru/index.php?content=../../admin.php то видно весь код на ружу и крути да верти.

Спустя 1 час, 43 минуты, 22 секунды (7.04.2009 - 16:26) stepan написал(а):
$inc = str_replace('http','',$_GET['inc']);
$inc = str_replace('ftp','',$_GET['inc']);
$inc = str_replace(':','',$_GET['inc']);
$inc = str_replace('/','',$_GET['inc']);
$inc = str_replace('\\','',$_GET['inc']);
$inc = str_replace('.','',$_GET['inc']);

Я впоймал клина

Спустя 3 минуты, 25 секунд (7.04.2009 - 16:29) FatCat написал(а):
$_GET['content'] подставляется в строку запроса чтения файла?
Такие конструкции лучше изначально не строить.

А вообще, вот парсер входящих, работающий в нашем форуме:
Свернутый текст
PHP
function parse_incoming()
    {
        global 
$HTTP_GET_VARS$HTTP_POST_VARS$HTTP_CLIENT_IP$REQUEST_METHOD$REMOTE_ADDR$HTTP_PROXY_USER$HTTP_X_FORWARDED_FOR;
        
$return = array();
        
        if( 
is_array($HTTP_GET_VARS) )
        {
            while( list(
$k$v) = each($HTTP_GET_VARS) )
            {
                if ( 
$k == 'INFO' )
                {
                continue;
                }
                if( 
is_array($HTTP_GET_VARS[$k]) )
                {
                    while( list(
$k2$v2) = each($HTTP_GET_VARS[$k]) )
                    {
                        
$return[$k][ $this->clean_key($k2) ] = $this->clean_value($v2);
                    }
                }
                else
                {
                    
$return[$k] = $this->clean_value($v);
                }
            }
        }
        
        
// Overwrite GET data with post data
        
        
if( is_array($HTTP_POST_VARS) )
        {
            while( list(
$k$v) = each($HTTP_POST_VARS) )
            {
                if ( 
is_array($HTTP_POST_VARS[$k]) )
                {
                    while( list(
$k2$v2) = each($HTTP_POST_VARS[$k]) )
                    {
                        
$return[$k][ $this->clean_key($k2) ] = $this->clean_value($v2);
                    }
                }
                else
                {
                    
$return[$k] = $this->clean_value($v);
                }
            }
        }
        
        
//----------------------------------------
        // Sort out the accessing IP
        // (Thanks to Cosmos and schickb)
        //----------------------------------------
        
        
$addrs = array();
        
        foreach( 
array_reverseexplode','$HTTP_X_FORWARDED_FOR ) ) as $x_f )
        {
            
$x_f trim($x_f);
            
            if ( 
preg_match'/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/'$x_f ) )
            {
                
$addrs[] = $x_f;
            }
        }
        
        
$addrs[] = $_SERVER['REMOTE_ADDR'];
        
$addrs[] = $HTTP_PROXY_USER;
        
$addrs[] = $REMOTE_ADDR;
        
        
//header("Content-type: text/plain"); print_r($addrs); print $_SERVER['HTTP_X_FORWARDED_FOR']; exit();
        
        
$return['IP_ADDRESS'] = $this->select_var$addrs );
                                                 
        
// Make sure we take a valid IP address
        
        
$return['IP_ADDRESS'] = preg_replace"/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/""\\1.\\2.\\3.\\4"$return['IP_ADDRESS'] );
        
        
$return['request_method'] = ( $_SERVER['REQUEST_METHOD'] != "" ) ? strtolower($_SERVER['REQUEST_METHOD']) : strtolower($REQUEST_METHOD);
        
        return 
$return;
    }

Дальше все обращения идут уже к элементам массива:
PHP
$ibforums->input['showtopic']
и т.д.

Спустя 5 часов, 7 минут, 9 секунд (7.04.2009 - 21:36) kirik написал(а):
Цитата (stepan @ 7.04.2009 - 06:22)
Помогите пожалуйста я не пойму как фильтровать URL т.е. как уберечся от такого

тупо создай массив разрешенных страниц, и при запросе проверяй, есть-ли такая страница или нет.
Типа:
PHP
$path '/home/stepan/www';
$allowed = array('index.php''contacts.php''about.php''fuckit.php');
if(isset(
$_GET['content']) && in_array($_GET['content'], $allowed))
{
    include(
$path.'/'.$_GET['content']);
}
else
{
    include(
$path.'/'.current($allowed));
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.