|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Переход по страницам на PHP |
|
Переход по страницам на PHP
|
Ветеран Сообщения: 637 |
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 13:36, 01-10-2005 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать elfoflorien
В любом случае достаточно проверять, существует ли такой такой файл, на которой указывает переменная $action. Мы же знаем в какой папке лежат все подобные файлы, вот там и смотрим. |
------- Отправлено: 16:19, 04-10-2005 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 21:59, 04-10-2005 | #12 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать elfoflorien
Насчёт такого примера вы правы, но неужели этот файл и вправду вам выдаётся?? В любом случае есть золотое правило: Не доверяем данным, полученным от юзеров-то есть бережённого бог бережёт. Довольно-таки простой выход, это никогда не передавать имена файлов с расширением, то пишем include($action.html) |
------- Отправлено: 22:37, 04-10-2005 | #13 |
Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 13:56, 05-10-2005 | #14 |
Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Хотя нет, извеняюсь, баг остается прежним
|
------- Отправлено: 14:26, 05-10-2005 | #15 |
Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать
Вот рабочий вариант, правда можно читать все файлы которые в каталоге лежат. |
------- Отправлено: 14:43, 05-10-2005 | #16 |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать fossil, vadimiron
как насчет использования метода POST вместо GET? тогда ведь пользователь не сможет так просто подделать имя файла $action; есть, конечно, возможность посмотреть HTML код и послать заголовки и POST, и GET, но все равно пользователь просто так ничего не сделает и не узнает имя переменной, в которой находится путь; потом еще один выход - шифровать содержимое $action, чтобы злоумышленник просто не знал, что туда написать. Можно воспользоваться стандартным алгоритмом PHP, а можно написать свой. |
------- Последний раз редактировалось elfoflorien, 05-10-2005 в 16:04. Отправлено: 15:43, 05-10-2005 | #17 |
Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать elfoflorien
Если можешь, пожалуйста про шифрование поподробнее. Можно просто проверять, чтобы нельзя использовать специальные символы, правда я незнаю как. Кто знает напишите плз |
------- Отправлено: 17:42, 05-10-2005 | #18 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать 2All
есть такая замечательная функция basename. Обрезает путь, возвращая собственно имя файла. После чего приставляем свой настоящий путь до файла и плюем на всех кулхцкеров . (В случаях, когда нет ветвления по каталогам, или его можно легко предопределить, скажем по тому же имени файла, очень даже помагает). В случае чего можно использовать также dirname, парсить результат и посылать всех, кто пытается выйти за пределы предопределенного дерева каталогов. Насчет $_GET и $_POST - elfoflorien абсолютно прав, - только через предопределенные переменные и желательно через $_POST elfoflorien fossil Шифрование - я бы не стала играть в эти игры , потому, что следующей после этого проблемой встанет проблема индексирования нашего сайта поисковыми системами |
Отправлено: 18:04, 05-10-2005 | #19 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Доступ - [решено] Как отключить доступ к интернет страницам | ВладимирТ | 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 |
|