Как отключить allow_url_include?

Тема в разделе "Как сделать...", создана пользователем danneo, 14 мар 2015.

  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    Написал хостеру. Он сказал, что при отключении этой функции, на одном из сайтов не будет работать мультисайтовость (автоматическое создание поддоменов, через поддомен: *.site.ru)?
    С чем это связано? Хостер молчит...
     
  2. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    А зачем отключать эту возможность? Скрипты апдейта, если такие есть, могут перестать работать.
    Просто не понимаю, зачем себя ограничивать.
     
    pozhisni нравится это.
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    да как бы безопасность...
     
  4. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Безопасность прежде всего в Ваших руках.
    У меня 2 хостинга. Один постоянно обо мне «заботится», отключая подобные функции, и периодически его ломают (правда не мои скрипты, но соседей). Другой — включено всё, но о взломах не слышно. Иногда ддосят только, но это везде может случиться.
    Мистика? Нет. Просто первый менее квалифицирован.
    Совет: лучше скрипты защитите от инъекций. Если скрипт не защищён, взломают и зальют что хошь, никакое отключение allow_url_include не поможет. Если защищён, то включение ничего не ослабит.
    Если сомневаетесь в защите — бекапьте почаще, это реально спасает. И храните архив как минимум в 2 местах.
    И даже если не сомневаетесь в защите, всё равно бекапьте.
     
    pozhisni нравится это.
  5. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    allow_url_include - PHP_INI_SYSTEM - Значение может быть установлено в php.ini или httpd.conf
    http://php.net/manual/ru/filesystem.configuration.php
    http://php.net/manual/ru/configuration.changes.modes.php

    Мультисайтовость такого рода настраивается через VirtualHost в apache или server_name nginx, зачем это для php?.. Могу предположить, что они создают подпапку для wildcard доменов с единственным файлом php, который инклюдит по юрлу основной домен, но это дикое извращение и вряд ли на это кто-то пойдёт в здравом уме. Всё же интересно будет если вы добьётесь от них внятного ответа.

    Все мы используем сторонние библиотеки и не всегда проводим аудит их безопасности...
    Имхо, по умолчанию должно быть отключено, но должна быть возможность включения в настройках панели хостинга.

    Не стоит пользоваться цмс, которая апдейтит скрипты через include внешнего url. Для апдейта есть file_get_contents, curl и другие инструменты.
    Все могут допустить ошибку и не стоит давать шанс её воспользоваться, если этого можно избежать :)
     
    Последнее редактирование: 15 мар 2015
    pozhisni, danneo и Denixxx нравится это.
  6. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Да, Вы правы. У меня из сторонних PHP библиотек только PHPExcel и Sitemap generator, наверное поэтому упускаю из вида вариант, что у других может быть не так.
    Однако моё глубокое убеждение, что если скрипт требует отключения чего-то там в конфигах «в целях безопасности», то этот скрипт дыряв. И нужно латать скрипт, а не конфиги. Я понимаю ещё файловые права или .htaccess нужно правильно настраивать — но функции удаленного доступа иногда реально нужны. Я например могу захотеть парсер или прокси. У меня даже в движке предусмотрен режим парсинга PHP в статьях — если моя левая пятка завтра захочет, могу код прокси прямо в движке написать, чтобы проверить как работает.
    Специально погуглил как мжет реально навредить включение этой опции. Нашел http://www.webhostingbuzz.com/wiki/why-allow_url_include-evil/
    4 тупейших ошибки в данном примере.
    Причем в самом жёстком последнем случае
    HTML:
    <?php
    $page = ($_GET['page']) ? $_GET['page'] : "index.php";
    ?>
    <html>
      <head>
        <title>This is EVIL</title>
      </head>
      <body>
    
    ...anything here...
    
    <?php include($page); ?>
    
    ...anything here...
    
      </body>
    </html>
    
    Здесь инклюд и взлом возможен и с отключенным allow_url_include. Если человек не экранирует данные, поступающие от пользователя, то он ССЗБ.
     
    Последнее редактирование: 15 мар 2015
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.421
    Симпатии:
    109
    latteo, как всегда в точку :)
    техподдержка все исправила, когда речь пошла о конкретике