http протокол

Работа с протоколом HTTP. Web-формы

Для передачи информации от браузера к серверу, используют web-формы. Основные атрибуты тега ‘form’:

  • action — файл-обработчик формы — $_SERVER[‘PHP_SELF’].
  • method — GET или POST. По-умолчанию используется GET.

Простая форма отправки запроса на сервер:

<form action="…">
Логин:
<input name="login"
type="text">
Пароль:
<input name="pwd"
type="password">
<input type="submit">
</form>

Метод GET

При отправке формы, браузер по ней пробегается и составляет строку запроса:

GET /form.php?name=admin&lastname=gogol

Т.е. в адресной строке после знака вопроса ? идет QUERY_STRING. Она попадает в глобальный массив $_SERVER[«QUERY_STRING»].

Недостатки метода:

  • Данных может быть много, и запрос будет длинным и некрасивым. Дополнение: все браузеры передают поисковые запросы методом get.
  • Т.к. все данные передаются через адресную строку, важные данные лучше так не передавать (напрмер, логин и пароль).
  • Есть некоторые операции, которые метод get не сможет выполнить: закачка файлов на сервер.

Метод POST

Применяют, чтобы не светить важные данные (id, пароль, логин).

При этом методе браузер также пробегается по форме, составляет строку запроса (!не query_string) следующего вида:

POST /action.php HTTP/1.1 /r/n
 Host: www.google.ru
 Accept: */*
 Accept-Language: ru
 Referrer: http://yandex.ru/yandsearch?text=Rehc
 User-Agent: Mozilla 4.0 (compatible; MSIE 6.1,…)
  Content-Length: 20
/r/n/r/n — пустая строка, это указатель, что заголовки закончены, а теперь пойдут параметры по методу POST:
login=Vasya&pwd=Parol
/r/n/r/n - пустая строка, конец запроса POST

Обработка сервером запроса GET и POST (как не надо делать)

Самый простой, способ обработать запрос сервером — это залезть в глобальный массив и узнать параметры атрибута query_string — _SERVER[«QUERY_STRING»] (лучше его не использовать). Но здесь есть два недостатка. Первый, если данные переданы методом post, здесь их не будет. Второй, не удобно вытягивать эту строку, затем разбивать ее на части и рассматривать каждый элемент.

У нас есть 2 служебных массива, которые хранятся в массиве $GLOBALS — $_GET[]. Все, что уходит методом get, попадает в этот массив, а имена элементов автоматом становятся именами ячеек массива $_GET.

Другой служебный массив, хранящийся в $GLOBALS — $_POST. Все, что уходит методом post, попадает в этот массив, а имена элементов автоматом становятся именами ячеек массива $_POST.

ВНИМАНИЕ! Так обрабатывать запросы get и post СТРОГО НЕ РЕКОМЕНДУЕТСЯ! Это дыра в безопасности.

Обработка сервером запроса GET и POST (как надо делать)

Никогда не используйте данные, пришедшие методом post и get напрямую (через глобальный массив $_GET, $_POST). Их всегда нужно фильтровать:

$name = strip_tags($_POST['name']); // вырезает все теги
$name = trim($_POST['name']); // вырезает все пробелы
$age = abs((int)$_POST['age']); // здесь ждем число, приводим данные к положительному числу
$age = is_numeric($_POST['age']); // проверим, на самом ли деле здесь число

Все данные, которые приходят к нам в заголовках, их все можно подменить. Никогда не доверяйте этим заголовкам.




Добавить комментарий

Ваш e-mail не будет опубликован.