Представьте, что приложение PHP для игрушек уязвимо к включению абсолютного локального файла, например.Почему включение ('php: // input') не работает?
<?php include($_GET['action']);
Я попробовал следующий запрос на использование его:
POST /?action=php://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3
foo
Это эффективно выполняет include('php://input');
с телом запроса foo
, так что я ожидал бы напечатать foo
. Однако я получаю следующую ошибку:
<br />
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
В чем проблема? Является ли это функцией безопасности PHP? Если да, может ли кто-нибудь указать на ответственную часть исходного кода PHP, которая смягчает это?
Как насчет пользовательских потоков? Используя 'stream_wrapper_register' и весь этот джаз? – Halcyon
Проверьте значение этого параметра в вашей конфигурации http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek
@Halcyon Я слушаю. Я не нашел это пригодным для использования на современной установке LAMP, за исключением случаев, когда у вас есть примитив с файловой записью (например, 'session_start()' или журналирование, специфичное для приложения) и т.д.) –