Пользовательский ввод включает - PullRequest
1 голос
/ 10 июля 2009

Это чертовски безопасно, верно? Что-то я пропустил?

$page = sprintf("%s/%s.php", "pages", $_GET['page']);
if (file_exists($page)) {
    include $page;
}
else {
    echo "The page '$page' does not exist =(";
}

(да, вы можете использовать его)

Ответы [ 4 ]

4 голосов
/ 10 июля 2009

«Лучший» способ сделать это - получить массив разрешенных страниц, а затем сделать что-то вроде этого:

$page = $_GET['page'] . '.php';
if(in_array($page, $all_pages)) {
    include('pages/' . $page);
}

Вы можете легко получить список всех разрешенных страниц, выполнив что-то вроде этого:

$all_pages = glob('pages/*.php');

Документация: in_array, glob

4 голосов
/ 10 июля 2009

Это небезопасно, так как пользователь может произвольно загрузить любую страницу, какую ему нравится.

0 голосов
/ 10 июля 2009

Используйте basename (), чтобы убедиться, что информация о пути не указана:

$page = sprintf("%s/%s.php", "pages", basename($_GET['page']));
if (file_exists($page)) {
        include $page;
}
else {
        echo "The page '$page' does not exist =(";
}
0 голосов
/ 10 июля 2009

, если вы уверены, что нет / или .. в $_GET['page'], и что посетителю разрешено просматривать любой php-файл в pages каталоге, я думаю, что все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...