Часто при работе с формами нужно передать данные в форме скрытых полей. Представим, например, что форма, с которой вы работаете, требует передачи введенной в нее информации на сервер в течение пяти минут.
Если не использовать механизм сеансов, то единственным доступным методом будет создание скрытого элемента формы, содержащего время создания формы, как показано в листинге 5.2.
Листинг 5.2. Пример формы, чувствительной к времени заполнения
<FORM ACTION="process.php" METHOD=GET>
<INPUT TYPE="hidden" NAME="time" VALUE="">
Введите сообщение (у вас есть максимум 5 минут):
<INPUT TYPE="text"
NAME="mytext" VALUE="">
<INPUT TYPE="submit" Уа1ие="0тправить">
</FORM>
После отправки формы можно проверить время и убедиться, что значение скры-
того элемента time меньше текущего времени, возвращаемого функцией time(), не
более чем на 300 секунд (5 минут):
if ($_GET[ 'time']+300 >= timed) {
echo "Слишком поздно!<BR>";:
exit;
}
Главный недостаток такой системы заключается в том, что не существует способа проверить, что элемент времени, переданный на сервер, имеет ту же величину, что и величина, переданная при создании формы. При отправке формы в браузере пользователя отображается следующий URL-адрес: http://somewhere.com/process.php?time=1037613504
Этот URL может быть легко изменен пользователем, с целью "отмотать время назад" и создать впечатление, что форма была создана двумя минутами ранее, чем на самом деле. Для этого достаточно добавить 120 (60*2) секунд в параметр времени URL: http://somewhere.com/process.php?time=1037613684
В такой ситуации проверка данных будет очень полезной. Далее по тексту будет продемонстрировано, как использовать РНР для уверенности, что любые скрытые данные будут переданы так, как они были созданы.
|