[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: защита при постраничном выводе
GrafF(812)
Здравствуйте, в инете очень моного статей касаемых реализации постраничного вывода. Все они основаны на том, чтобы при переходе на новую страницу, передавать через GET ее номер. например:

*Проверяем поступил ли запрос на переключение страниц*/
if(empty($_GET['page']) || $_GET['page'] <=0) $page=1;
else $page=(int)$_GET['page'];
....

/*Определяем номер выводимой новости в базе*/
$start_pos=($page-1)*$per_page;
/*Составляем SQL запрос на выборку новостей из таблицы news*/
$res = mysql_query("SELECT * FROM news LIMIT $start_pos,$per_page");

и никто не пишет, что это не безопасно, поскольку в строке браузера можно дописать что-то типа DELETE FROM users.
Подскажите как сделать постраничный вывод безопасным?



Спустя 2 минуты, 32 секунды (8.07.2010 - 22:02) linker написал(а):
Вот это вот (int)$_GET['page']; убивает напрочь всякие там DELETE FROM users

$page = 0;
if (isset($_GET['page'])) $page = abs((integer)$_GET['page']);
короче
$page = isset($_GET['page'])?abs((integer)$_GET['page']):1;

Спустя 25 минут, 24 секунды (8.07.2010 - 22:27) GrafF(812) написал(а):
а мой код не безопасный?

Спустя 5 минут, 56 секунд (8.07.2010 - 22:33) linker написал(а):
Не боись, безопасный, можешь сам потестировать. Только вместо empty($_GET['page']) используй !isset($_GET['page'])

Спустя 4 минуты, 28 секунд (8.07.2010 - 22:38) GrafF(812) написал(а):
спасибо Вам большое biggrin.gif, а почему нужно использовать !isset ?

Спустя 7 часов, 9 минут, 12 секунд (9.07.2010 - 05:47) sl4mmer написал(а):
linker
кстати тоже стало интересно, почему в данном случае лучше !isset )) ммм... я видимо чего то не знаю (





Спустя 1 час, 23 минуты, 42 секунды (9.07.2010 - 07:11) Kuzya написал(а):
Вырезка из документации о empty:
Returns FALSE if var  has a non-empty and non-zero value. 

То есть она вернёт true если переменная не установлена, или установлена, но равна 0. А isset показывает есть ли вообще указанная переменная (пусть в ней хоть 0, хоть что)

Спустя 1 час, 25 минут, 10 секунд (9.07.2010 - 08:36) twin написал(а):
Так а чем она тут лучше...
Как раз тут empty() уместнее, так как не пустит 0.
$page = !empty($_GET['page'])?abs((int)$_GET['page']):1;

Спустя 2 часа, 55 минут, 54 секунды (9.07.2010 - 11:32) linker написал(а):
Не подумал про ноль, действительно empty лучше.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.