Я работаю на настройки, где URL-адрес будет по линиям:Безопасный способ включения страницы из параметра GET?
http://example.com/index.php?page=about
В действительности они будут переписаны в том, что из более простого URL. index.php
будет включать в себя еще одну страницу, используя этот код:
if (isset($_GET['page']))
{
$page = $_SERVER['DOCUMENT_ROOT'] . '/pages/' . $_GET['page'] . '.php';
if (is_file($page))
include $page;
else
echo 'That page doesn\'t exist.';
}
Предполагая, что все, что в папке страниц совершенно безопасна для включения, этот код безопасным? Я защищен от известных хаков каталога, то есть с использованием page=../../.passwd
. Есть ли что-нибудь еще, о чем я должен помнить?
Я думаю, что установка $ _GET ['page'] в '../../another/directory/file' может вызвать проблемы.Я оставлю его кому-то еще, чтобы проверить и показать вам способы обойти это. – MitMaro
AFAIK, который не вызовет никаких проблем. '$ page' получил бы что-то вроде'/var/www/pages /../ directory/file', который ** не ** разрешает '/ var/www/directory/file', правильно? – DisgruntledGoat
На самом деле я просто попробовал это, и '../' в середине пути ** действительно делает это, поднимая каталог. Я никогда не ожидал, что ... – DisgruntledGoat