вывод текста из *.php в index.php через ссылки

Тема в разделе "PHP", создана пользователем vave, 8 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    374
    Симпатии:
    15
    я всегда пользовался устарелым методом
    <?php
    if ($menu <>"") {
    include ("$menu.php");
    }
    else
    {
    include ("home.php");
    }


    ?>

    запрос выглядит как "?menu="
    но последнее время замечаю что сервера стали отключать функцию Register Global Variables, и как должен выглядеть новый код для совершения такого-же действия?
     
  2. tirrex

    tirrex

    Регистр.:
    9 ноя 2008
    Сообщения:
    213
    Симпатии:
    60
    если я правильно все понял, примерно так:

    Код:
    <?php
    if ($_GET['menu'] <>"") {
    include ($_GET['menu'].".php");
    }
    else
    {
    include ("home.php");
    }
    
    ?>
     
  3. Sangre

    Sangre Постоялец

    Регистр.:
    12 ноя 2008
    Сообщения:
    51
    Симпатии:
    6
    юзай глобальные массивы $_GET или $_POST, а лучше конечно $_REQUEST - так надёжнее )
     
  4. tirrex

    tirrex

    Регистр.:
    9 ноя 2008
    Сообщения:
    213
    Симпатии:
    60
    немного не в тему, но позволю себе добавить, что категорически не рекомендуется передавать имена скриптов для incude через запрос, особенно через URL
    это опасно, т.к. может привести к выполнению стронннего кода на вашем сервере
     
  5. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    если грамотно фильтровать то опасаться нечего
     
  6. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    И где в коде
    PHP:
    <?php
    if ($_GET['menu'] <>"") {
    include (
    $_GET['menu'].".php");
    }
    else
    {
    include (
    "home.php");
    }
    Фильтрация? Если так делать, то более безопасно делать включение файла примерно так
    PHP:
    $file "{$_GET['menu']}.{$random_postfix}.php";
    if(
    strpos(dirname($file), $_SERVER['DOCUMENT_ROOT']) !== false) {
     include 
    $file;
    }
    Но такой код лишь частично защитит от атак. Т.е. он не защитит от включения чужого файлега внутри вашей директории, если атакующему известна переменная ;$random_postfix. А лучше сделать включение такой шняги через switch/case/default - конструкцию. :)
     
  7. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    PHP:
    $allowed_menu=array('menu''shmenu''huemenu');
    if (
    array_search($_GET['menu'], $allowed_menu)!==false) {
        require_once(
    $_GET['menu'].".php");
    }
     
  8. studentpm

    studentpm

    Регистр.:
    8 ноя 2006
    Сообщения:
    184
    Симпатии:
    132
    Ну раз пошла такая пьянка то вот:
    PHP:
    <?php
        define
    ('DOCROOT'dirname(__FILE__).'/');
        if (!empty(
    $_GET['menu']) && strpos(DOCROOT.$_GET['menu'].'.php''/../')===false && is_file(DOCROOT.$_GET['menu'].'.php'))
        {
            include (
    DOCROOT.$_GET['menu'].'.php');
        }
        else
        {
            include (
    DOCROOT.'main.php');
        }
    ?>
     
  9. maxfighton

    maxfighton Создатель

    Регистр.:
    18 дек 2008
    Сообщения:
    39
    Симпатии:
    7
    ну в помощь вам мод реврайт, а еще навернуть так вот он мой защитный модуль, инклудим в начале странички и потом любую переменную transform_HTML(строка, длина строки) // чтобы не переполнить буфер обмена, ато есть умельцы и так ламают, защита от ява ксс атак, инджект атак скл, чтобы не дропнули табличку)) и т.д

    <?php
    function transform_HTML($string, $length= null)
    {
    $string = trim($string);
    $string = iconv("cp1251","UTF-8",$string);

    //mb_convert_encoding

    $string = htmlentities($string, ENT_NOQUOTES,"UTF-8");

    $string= str_replace("#", "#", $string);
    $string= str_replace("%", "%", $string);
    $length = intval($length);

    if ($length>200){
    $string=substr($string,0,200);
    }

    $string = iconv("UTF-8","cp1251",$string);
    return $string;

    }

    ?>

    не забываем говорить спасибо)) еесли появяться вопросы пишите в личку! отвечу как будет время :thenks:
     
  10. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    maxfighton,
    странный код
    1. зачем 2 раза конвертировать сначало в utf-8 , а затем обратно?
    2. почему проверка "на переполнение буффера" стоит после конвертации и htmlentities?
    т.е. сначала конвертируем 100 Мб текст, а потом его выкидываем c помощью substr, неэффектифвно ...
    А если уязвимы именно эти функции?
    да кстати вот http://www.securitylab.ru/vulnerability/276352.php
    3. сама обрезка строки может быть сокращена до одной строки
    $string=substr($string,0,200); и все , зачем if?
     
Статус темы:
Закрыта.