//Статья для самых маленьких, вносит небольшой щтрих в понимание анонимности в сети.
Здравствуйте!
Я хотел бы рассказать немного об HTTP-методах GET и POST.
Для начала конечно же справка из Википедии:
Код:
GET Запрашивает содержимое указанного ресурса. Запрашиваемый ресурс может принимать параметры (например, поисковая система может принимать в качестве параметра искомую строку). Они передаются в строке URI (например: http://www.example.net/resource?param1=value1¶m2=value2). Согласно стандарту HTTP, запросы типа GET считаются идемпотентными[4] — многократное повторение одного и того же запроса GET должно приводить к одинаковым результатам (при условии, что сам ресурс не изменился за время между запросами). Это позволяет кэшировать ответы на запросы GET.
Код:
POST Передаёт пользовательские данные (например, из HTML-формы) заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. В отличие от метода GET, метод POST не считается идемпотентным[4], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).
Теперь перейдём к конкретному примеру.
Допустим, Вы копаете какой-то сайт. И вдруг, Вы обнаруживаете недостаточную фильтрацию данных в GET-запросе. Это может быть XSS, PHP-include, SQL-injection - что угодно. Вы начинаете радостно скакать, крутиться на кресле и биться головой об клавиатуру.
Но тем временем, бдительный администратор сайта зорко просматривает файл access.log на своём сервере. И тут он видит что-то вроде этого:
Код:
195.34.254.6 - - [21/Apr/2008:20:30:54 +0000] "GET /index.php?id="><script>alert()</script>" HTTP/1.1" 200 2425
Умный администратор тут же напишет обработку переменной и бага испарится на Ваших глазах! Обидно...
Для того, чтобы такое не могло произойти, надо использовать метод POST.
В таком случае, в файле access.log появится лишь такая запись:
Код:
195.34.254.6 - - [21/Apr/2008:20:30:54 +0000] "POST /index.php HTTP/1.1" 200 2425
А она конечно ничего не говорит о найденной Вами уязвимости.
Итак, пишем страничку на HTML для отправки данных с помощью метода POST:
Код:
<html>
<body>
<form action="АДРЕС_СКРИПТА" method="post">
<input type="text" name="ИМЯ_ПЕРЕМЕННОЙ">
<input type="submit" value="OK">
</form>
</body>
</html>
Вот и всё! Правда временами это не работает, так как POST-data может вообще не обрабатываться.