Переход по страницам на PHP

Аватара пользователя
vadimiron

Re: Переход по страницам на PHP

Сообщение vadimiron »

elfoflorien

В любом случае достаточно проверять, существует ли такой такой файл, на которой указывает переменная $action. Мы же знаем в какой папке лежат все подобные файлы, вот там и смотрим.
Аватара пользователя
elfoflorien

Re: Переход по страницам на PHP

Сообщение elfoflorien »

vadimiron



Код:

Код: Выделить всё

http://mysite/index.php.htm?action=../../../../../../../etc/passwd

на Unix такой файл существует, поэтому ваша проверка ничего не даст - браузеру будет передан ../../../../../../../etc/passwd, т.е. /etc/passwd

или я чего-то не понял?
Аватара пользователя
vadimiron

Re: Переход по страницам на PHP

Сообщение vadimiron »

elfoflorien

Насчёт такого примера вы правы, но неужели этот файл и вправду вам выдаётся??



В любом случае есть золотое правило: Не доверяем данным, полученным от юзеров-то есть бережённого бог бережёт.

Довольно-таки простой выход, это никогда не передавать имена файлов с расширением, то пишем include($action.html)
Аватара пользователя
fossil

Re: Переход по страницам на PHP

Сообщение fossil »

Я сделал так, и вродебы все работает:



PHP код:

Код: Выделить всё

if ($action == "states") {

$inc="states.php";

    if ($st == $st and !empty($st)) {

    if (file_exists("states/$st.php")) {

    $inc="states/$st.php";

    } else {$inc="error.htm";}

    }

} else {$inc="error.htm"} 



Аватара пользователя
fossil

Re: Переход по страницам на PHP

Сообщение fossil »

Хотя нет, извеняюсь, баг остается прежним Изображение
Аватара пользователя
fossil

Re: Переход по страницам на PHP

Сообщение fossil »

PHP код:

Код: Выделить всё

if ($action == "states") {

$inc="states.php";

    if ($st == $st and !empty($st)) {

    if (file_exists("states/$st.php") and substr($st, 0, 2) != ".." and substr($st, 0, 1) != "/") {

    $inc="states/$st.php";

    } else {$inc="error.htm";}

    }

} 






Вот рабочий вариант, правда можно читать все файлы которые в каталоге лежат.
Аватара пользователя
elfoflorien

Re: Переход по страницам на PHP

Сообщение elfoflorien »

fossil, vadimiron

как насчет использования метода POST вместо GET? тогда ведь пользователь не сможет так просто подделать имя файла $action; есть, конечно, возможность посмотреть HTML код и послать заголовки и POST, и GET, но все равно пользователь просто так ничего не сделает и не узнает имя переменной, в которой находится путь; потом еще один выход - шифровать содержимое $action, чтобы злоумышленник просто не знал, что туда написать. Можно воспользоваться стандартным алгоритмом PHP, а можно написать свой.
Аватара пользователя
fossil

Re: Переход по страницам на PHP

Сообщение fossil »

elfoflorien

Если можешь, пожалуйста про шифрование поподробнее.



Можно просто проверять, чтобы нельзя использовать специальные символы, правда я незнаю как. Кто знает напишите плз Изображение
Аватара пользователя
mar

Re: Переход по страницам на PHP

Сообщение mar »

2All

есть такая замечательная функция
basename
. Обрезает путь, возвращая собственно имя файла. После чего приставляем свой настоящий путь до файла и плюем на всех кулхцкеров Изображение. (В случаях, когда нет ветвления по каталогам, или его можно легко предопределить, скажем по тому же имени файла, очень даже помагает).

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



Насчет $_GET и $_POST - elfoflorien абсолютно прав, - только через предопределенные переменные и желательно через $_POST



elfoflorien

fossil

Шифрование - я бы не стала играть в эти игры Изображение, потому, что следующей после этого проблемой встанет проблема индексирования нашего сайта поисковыми системами
Ответить

Вернуться в «Вебмастеру»