Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Переход по страницам на PHP

Ответить
Настройки темы
Переход по страницам на PHP

Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет, недавно начал изучать PHP, и вот пишу сайт.
Имеется главная страница index.php. На ней есть таблица, слева линк $PHP_SELF?action=states, а справа прописано include($inc);

В index.php лежит скрипт типа:
if ($action == "states"){
$inc="states.php";
}

При нажатии все нормально загружается.
На states.php у мен лежит линк такого соджержания $PHP_SELF?action=states&st=01

Вопрос:
Как сделать чтобы при нажатии на этот линк страница открывалась здесь же.
Я пытался сам написать, и вот что вышло:
index.php

if ($action == "states") {
$inc="states.php"
if ($st == $st and $st != "") {
$inc="states/$st.htm";
}
}

Все бы ничего, но если ввести неправильно сформированный запрос, то можно читать любые файлы на сервере Вариант с else {$inc="error.htm";} не прокатывает, так как при заходе на states.php вылезает error.htm

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 13:36, 01-10-2005

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


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

-------
Fortes fortuna adiuvat


Отправлено: 16:19, 04-10-2005 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для elfoflorien

Старожил


Сообщения: 158
Благодарности: 1

Профиль | Отправить PM | Цитировать


vadimiron
Код: Выделить весь код
http://mysite/index.php?action=../../../../../../../etc/passwd
на Unix такой файл существует, поэтому ваша проверка ничего не даст - браузеру будет передан ../../../../../../../etc/passwd, т.е. /etc/passwd
или я чего-то не понял?

-------
panem et circences! (c)


Отправлено: 21:59, 04-10-2005 | #12


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


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

В любом случае есть золотое правило: Не доверяем данным, полученным от юзеров-то есть бережённого бог бережёт.
Довольно-таки простой выход, это никогда не передавать имена файлов с расширением, то пишем include($action.html)

-------
Fortes fortuna adiuvat


Отправлено: 22:37, 04-10-2005 | #13


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


Я сделал так, и вродебы все работает:
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"

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 13:56, 05-10-2005 | #14


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 14:26, 05-10-2005 | #15


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

if ($action == "states") {

$inc="states.php";
    if (
$st == $st and !empty($st)) {
    if (
file_exists("states/$st.php") and substr($st02) != ".." and substr($st01) != "/") {
    
$inc="states/$st.php";
    } else {
$inc="error.htm";}
    }


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

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 14:43, 05-10-2005 | #16


Аватара для elfoflorien

Старожил


Сообщения: 158
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

-------
panem et circences! (c)


Последний раз редактировалось elfoflorien, 05-10-2005 в 16:04.


Отправлено: 15:43, 05-10-2005 | #17


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


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

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

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 17:42, 05-10-2005 | #18

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 18:04, 05-10-2005 | #19



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Переход по страницам на PHP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Как отключить доступ к интернет страницам ВладимирТ Microsoft Windows 2000/XP 2 25-11-2008 08:19
[решено] Доступ к сохраненным на компьютере Web страницам adja Хочу все знать 4 05-07-2008 20:02
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
PHP. Как сделать возможность перехода по страницам? JavaScript Вебмастеру 5 10-09-2007 13:24
Доступ поисковика к закрытым страницам ScorpionXXX Хочу все знать 5 18-06-2006 02:20




 
Переход