За последние 24 часа нас посетили 20803 программиста и 1116 роботов. Сейчас ищут 366 программистов ...

Даёт ли такая обработка защиту от межсайтового скриптинга

Тема в разделе "PHP для новичков", создана пользователем Zar, 18 июн 2013.

  1. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Даёт ли такая обработка защиту от межсайтового скриптинга?
    Если есть уязвимость, прошу указать, какая. Спасибо.

    Код (Text):
    1.  
    2. if (isset($_GET['route'])) {
    3. $i_s = array('/', ':', 'http', '.', '<', '>', '\\');
    4. $o_s = array('-', '-', '-',    '-', '-', '-', '-');
    5.  
    6. $route = strip_tags(str_replace($i_s, $o_s, $_GET['route']));
    7. }
    8.  
    9. @is_file("./mydir/{$route}.php") ? include("./mydir/{$route}.php") : include("./mydir/home.php");
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    1. зачем здесь "собака"?

    2. воспользуйся "белым списком", это 100% решение
     
  3. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    >>1. зачем здесь "собака"?
    Чтобы избежать предупреждения, а настройки менять не хочу, нравится именно так.
    Notice: Undefined variable: route in C:\www\Apache2\htdocs\v\source.php on line 41

    >>2. воспользуйся "белым списком", это 100% решение
    Можно подробнее? Что за белый список?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    это нехорошая ситуация и прятаться от нее не надо. иначе пи*ц неизбежен!

    а интуитивно непонятно? ищи слова "белый список" здесь:
    http://php.ru/manual/security.filesystem.nullbytes.html

    замени switch-case на $x = array() и if (in_array()), возможно так будет красивей.
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    Сами поняли, что сказали?
    Что вы там менять собрались? Это Notice говорит о том, что переменная не была определена ранее...
    Застреите собаку и выше всего кода напишите:
    $route='';
    Или тогда проверяйте isset или empty.
     
  6. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    artoodetoo, спасибо за белый список. Хорошее решение.

    Your, полностью согласен. Спасибо.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Примерно должно было выглядеть так.
    Код (PHP):
    1. $dir='./mydir/';
    2. if(isset($_GET['route'])) {
    3.     $i_s=array('/', ':', 'http', '.', '<', '>', '\\');
    4.     $o_s=array('-', '-', '-',    '-', '-', '-', '-');
    5.     $route=strip_tags(str_replace($i_s, $o_s,$_GET['route']));
    6. }
    7. if(!empty($route)) {
    8.     $route=$dir.$route.'.php';
    9.     if(file_exists($route)) {
    10.         require_once $route;
    11.     } else {
    12.         echo'Страница '.basename($route).' не найдена!';
    13.     }
    14. } else {
    15.     require_once $dir.'home.php';
    16. } 
    Хотя я бы советовал делать примерно так:

    Код (PHP):
    1. $dir='./mydir/';
    2. if(!empty($_GET['route'])) {
    3.     $route=$dir.$_GET['route'].'.php';
    4.     if(file_exists($route)) {
    5.         require_once $route;
    6.     } else {
    7.         echo'Файл '.basename($route).' не найден!';
    8.     }
    9. } else if(file_exists($dir.'home.php')) {
    10.     require_once $dir.'home.php';
    11. } else {
    12.     echo'Файл home.php не найден!';
    13. } 
    А вообще еще лучше сделать отдельный контроллер страниц, чтобы не заморачиваться с проверками isset, empty и проверкой путей...
     
  8. Zar

    Zar Активный пользователь

    С нами с:
    28 авг 2012
    Сообщения:
    52
    Симпатии:
    1
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    Спасибо. Использую переключатель switch
     
  9. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    А если так
    Код (Text):
    1. if (isset($_GET['route']) and $_GET['route']=='') { ...
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Re: Даёт ли такая обработка защиту от межсайтового скриптинг

    и получится (КУЙ ЛОГИЧНО)