Переход по страницам на PHP
-
vadimiron
Re: Переход по страницам на PHP
elfoflorien
В любом случае достаточно проверять, существует ли такой такой файл, на которой указывает переменная $action. Мы же знаем в какой папке лежат все подобные файлы, вот там и смотрим.
В любом случае достаточно проверять, существует ли такой такой файл, на которой указывает переменная $action. Мы же знаем в какой папке лежат все подобные файлы, вот там и смотрим.
-
elfoflorien
Re: Переход по страницам на PHP
vadimiron
Код:
на Unix такой файл существует, поэтому ваша проверка ничего не даст - браузеру будет передан ../../../../../../../etc/passwd, т.е. /etc/passwd
или я чего-то не понял?
Код:
Код: Выделить всё
http://mysite/index.php.htm?action=../../../../../../../etc/passwdна Unix такой файл существует, поэтому ваша проверка ничего не даст - браузеру будет передан ../../../../../../../etc/passwd, т.е. /etc/passwd
или я чего-то не понял?
-
vadimiron
Re: Переход по страницам на PHP
elfoflorien
Насчёт такого примера вы правы, но неужели этот файл и вправду вам выдаётся??
В любом случае есть золотое правило: Не доверяем данным, полученным от юзеров-то есть бережённого бог бережёт.
Довольно-таки простой выход, это никогда не передавать имена файлов с расширением, то пишем include($action.html)
Насчёт такого примера вы правы, но неужели этот файл и вправду вам выдаётся??
В любом случае есть золотое правило: Не доверяем данным, полученным от юзеров-то есть бережённого бог бережёт.
Довольно-таки простой выход, это никогда не передавать имена файлов с расширением, то пишем include($action.html)
-
fossil
Re: Переход по страницам на PHP
Я сделал так, и вродебы все работает:
PHP код:
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
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
fossil, vadimiron
как насчет использования метода POST вместо GET? тогда ведь пользователь не сможет так просто подделать имя файла $action; есть, конечно, возможность посмотреть HTML код и послать заголовки и POST, и GET, но все равно пользователь просто так ничего не сделает и не узнает имя переменной, в которой находится путь; потом еще один выход - шифровать содержимое $action, чтобы злоумышленник просто не знал, что туда написать. Можно воспользоваться стандартным алгоритмом PHP, а можно написать свой.
как насчет использования метода POST вместо GET? тогда ведь пользователь не сможет так просто подделать имя файла $action; есть, конечно, возможность посмотреть HTML код и послать заголовки и POST, и GET, но все равно пользователь просто так ничего не сделает и не узнает имя переменной, в которой находится путь; потом еще один выход - шифровать содержимое $action, чтобы злоумышленник просто не знал, что туда написать. Можно воспользоваться стандартным алгоритмом PHP, а можно написать свой.
-
fossil
Re: Переход по страницам на PHP
elfoflorien
Если можешь, пожалуйста про шифрование поподробнее.
Можно просто проверять, чтобы нельзя использовать специальные символы, правда я незнаю как. Кто знает напишите плз
Если можешь, пожалуйста про шифрование поподробнее.
Можно просто проверять, чтобы нельзя использовать специальные символы, правда я незнаю как. Кто знает напишите плз

-
mar
Re: Переход по страницам на PHP
2All
есть такая замечательная функция
. (В случаях, когда нет ветвления по каталогам, или его можно легко предопределить, скажем по тому же имени файла, очень даже помагает).
В случае чего можно использовать также
Насчет $_GET и $_POST - elfoflorien абсолютно прав, - только через предопределенные переменные и желательно через $_POST
elfoflorien
fossil
Шифрование - я бы не стала играть в эти игры
, потому, что следующей после этого проблемой встанет проблема индексирования нашего сайта поисковыми системами
есть такая замечательная функция
basename
. Обрезает путь, возвращая собственно имя файла. После чего приставляем свой настоящий путь до файла и плюем на всех кулхцкеров
. (В случаях, когда нет ветвления по каталогам, или его можно легко предопределить, скажем по тому же имени файла, очень даже помагает).В случае чего можно использовать также
dirname
, парсить результат и посылать всех, кто пытается выйти за пределы предопределенного дерева каталогов.Насчет $_GET и $_POST - elfoflorien абсолютно прав, - только через предопределенные переменные и желательно через $_POST
elfoflorien
fossil
Шифрование - я бы не стала играть в эти игры
, потому, что следующей после этого проблемой встанет проблема индексирования нашего сайта поисковыми системами