Какой запрос безопаснее get или post
Перейти к содержимому

Какой запрос безопаснее get или post

GET или POST: что выбрать?

Сейчас наиболее часто используются всего два HTTP метода: GET и POST. Но оказалось, что даже среди этих двух «сосен» веб разработчики умудряются теряться. Этому есть объяснение: оба метода можно использовать для получения одинакового результата. Но нужно помнить, что необдуманное применение какого-либо из методов может привести к плачевным последствиям, среди которых большие нагрузки на канал и дыры в безопасности.

GET или POST

Чтобы этого избежать достаточно просто детальней разобраться в назначениях и различиях этих методов.

Если вникнуть в значение названий методов, уже многое прояснится. GET (с англ. получать), т.е. следует применять для запроса данных. POST (c англ. отправлять по почте) — применяем для отправки данных на сервер. Вроде все предельно просто и понятно. Но кто желает разрабатывать сайты чуть сложнее сайта визитки с одной формой обратной связи, лучше с вопросом познакомиться поближе.

Безопасные и небезопасные HTTP запросы

Спецификация HTTP 1.1 вводит два понятия: безопасный и небезопасный запрос, или если быть более точным, метод.

Безопасные — это методы, которые могут лишь запросить информацию. Они не могут изменить запрашиваемый ресурс, не могут привести к нежелательным результатам для пользователя, других лиц или сервера. Примерами безопасных есть запрос HTML кода веб страницы или изображения. К безопасным относятся методы HEAD и GET.

Заметка

В реальности умельцы конечно могут нанести вред и GET запросами. Например, зацикливаниями запросов.

Небезопасные запросы, как уже все догадались, могут потенциально привести к нехорошим последствиям, если ими воспользоваться повторно. Такие запросы могут менять содержимое ресурса, к которому обращаются. Примеры таких запросов: отправка сообщений, регистрация, онлайн платежи. К небезопасным относятся методы POST, PUT, DELETE.

Идемпотентнные (idempotent) методы

Идемпотентность — свойство методов, которые при многочисленном повторном обращении вернут один и тот же результат, кроме случаев когда информация устарела. Это значит, что при обращении к одному и тому же URL все пользователи будут видеть одну и туже веб страницу, изображение, видео и т.п. Таким свойством обладают GET, PUT, DELETE методы.

А теперь подробней о самих методах GET и POST: составим каждому короткое «резюме».

GET

  • предназначен для получения данных с сервера;
  • тело запроса пустое;
  • обрабатываются на стороне сервера быстрее и с меньшим потреблением ресурсов сервера за счет пустого тела запроса;
  • передача переменных происходит в адресной строке (так видит пользователь, технически данные предаются в строке запроса) и поэтому видна информация о переменных и их значениях (данные не защищены);
  • способен передать небольшое количество данных на сервер: есть ограничения на длину URL, которое зависит от браузера, например, IE6 = 2Kb. На это число и рекомендуют ориентироваться разработчики Yahoo!;
  • может передать только ASCII символы;
  • такой запрос можно скопировать, сохранить (например, в закладках);
  • запрос может кэшироваться (этим можно управлять);
  • для дополнительного снижения нагрузки на канал и сервер доступны условные и частичные запросы;
  • не разрывает HTTP соединение (при включенном на сервере режиме keepAlive).

POST

  • предназначен для отправления данных на сервер;
  • передача данных происходит в теле запроса;
  • обработка на стороне сервера медленнее и «тяжелее», чем GET, потому что помимо заголовков нужно анализировать тело запроса;
  • способен передать большие объемы данных;
  • способен передать файлы;
  • страницу, сгенерированную методом POST нельзя сохранить в закладки;
  • разрывает HTTP соединение;
  • для передачи даже очень малого объема информации большинством браузеров отправляет минимум два TCP пакета: заголовок, а потом тело запроса.

Оказывается не такие уж и похожие эти два метода. Применение того или иного должно быть обусловлено поставленной задачей, а никак не тем, что GET используется по умолчанию или с ним легче работать. GET, конечно, в большинстве случаев более выигрышный вариант, особенно при построении быстрых AJAX, но не стоит забывать о его недостатках. Для себя же сделал простую алгоритм-заметку по выбору метода:

Простой выбор между GET и POST

  • если по логике будет происходить небезопасный запрос — использую POST;
  • если идемпотентность нежелательна — использую POST;
  • если требуется передать большой объем данных или файл — использую POST;
  • в остальных случаях использую GET.

Это упрощенный вариант принятия решения, но для большинства случаев он сгодится.

Материалы

  • Руководство по выбору между GET и POST
  • Method Definitions
  • XMLHttpRequest (XHR) Uses Multiple Packets for HTTP POST?

Методы HTTP: GET vs. POST

Два наиболее часто используемые методы HTTP являются: GET и POST.

Что такое HTTP?

Протокол передачи гипертекста (HTTP) предназначена для обеспечения связи между клиентами и серверами.

HTTP работает в качестве протокола запроса-ответа между клиентом и сервером.

Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт может быть сервером.

Пример: клиент (браузер) подает запрос HTTP на сервер; то сервер возвращает ответ клиенту. Ответ содержит информацию о состоянии запроса и может также содержать запрошенное содержимое.

Два HTTP методы запроса: GET и POST

Два часто используемые методы для запроса-ответа между клиентом и сервером: GET и POST.

  • GET — запрашивает данные из указанного ресурса
  • POST — Отправляет данные, подлежащие обработке для указанного ресурса

Метод GET

Обратите внимание , что строка запроса (пары имя / значение) передается в URL запроса GET:

/test/demo_form.asp?name1=value1&name2=value2

Некоторые другие заметки о запросах GET:

  • GET запросы могут кэшироваться
  • GET запросы остаются в истории браузера
  • GET запросы могут быть закладкой
  • не получать запросы не должны использоваться при работе с конфиденциальными данными
  • GET запросы имеют ограничения длины
  • GET запросы должны быть использованы только для получения данных

Метод POST

Обратите внимание , что строка запроса (пары имя / значение) передается в теле HTTPсообщение запроса POST:

POST /test/demo_form.asp HTTP/1.1
Host: w3ii.com
name1=value1&name2=value2

Некоторые другие замечания по запросам POST:

  • POST запросы никогда не кэшируются
  • POST запросы не остаются в истории браузера
  • запросы POST не может быть закладкой
  • POST запросы не имеют ограничений по длине данных

Сравнить GET vs. POST

В следующей таблице сравниваются два метода HTTP: GET и POST.

ПОЛУЧИТЬ ПОСЛЕ
Кнопка BACK / Reload безвредный Данные будут представлены вновь (браузер должен предупредить пользователя, что данные собираются быть повторно представлены)
Отмеченный Может быть закладкой Не может быть закладкой
Сохранено в кэше Может быть кэшируются Не кэшировать
Тип кодирования применение / х-WWW-форм-urlencoded применение / х-WWW-форм-urlencoded или многокомпонентные / form-данных. Используйте многослойную кодировки для двоичных данных
история Параметры остаются в истории браузера Параметры не сохраняются в истории браузера
Ограничения по длине данных Да, используемый при передаче данных, метод GET добавляет данные в URL-адрес; и длина URL ограничена (максимальная длина URL составляет 2048 символов) Нет ограничений
Ограничения по типу данных Только ASCII символы допускаются Нет ограничений. Бинарные данные также разрешено
Безопасность GET менее безопасна по сравнению с POST, поскольку данные, отправленные является частью URL

Другие способы запроса HTTP

В следующей таблице перечислены некоторые другие методы запроса HTTP:

метод Описание
HEAD То же самое, но не GET возвращает только HTTP-заголовки и не тело документа
PUT Загружает представление заданного URI
DELETE Удаляет указанный ресурс
OPTIONS Возвращает методы HTTP, что сервер поддерживает
CONNECT Преобразует соединение запроса в прозрачный TCP / IP туннеля

Чем отличаются HTTP-методы GET и POST

HTTP-методы GET и POST — самые распространённые способы отправить или получить данные с сервера. Но в разных случаях оба метода могут быть небезопасными или неудобными в использовании. В этой заметке рассмотрим, какой метод когда использовать.

GET — метод для чтения данных с сайта. Например, для доступа к указанной странице. Он говорит серверу, что клиент хочет прочитать указанный документ. На практике этот метод используется чаще всего, например, в интернет-магазинах на странице каталога. Фильтры, которые выбирает пользователь, передаются через метод GET .

:authority: htmlacademy.ru :method: GET :path: /tutorial/php/http-header 

POST — метод для отправки данных на сайт. Чаще всего с помощью метода POST передаются формы.

URL-адрес запроса: https://htmlacademy.ru/ Метод запроса: POST Код состояния: 200 

Формат запроса

Протокол HTTP очень прост и состоит, по сути, из двух частей — заголовков и тела запроса или ответа.

Тело запроса — это информация, которую передал браузер при запросе страницы. Но тело запроса присутствует только если браузер запросил страницу методом POST . Например, если отправлена форма, то телом запроса будет содержание формы.

Пример GET-запроса. Информация передаётся прямо в заголовке.

GET /blog/?name1=value1&name2=value2 HTTP/1.1 Host: htmlacademy.ru 

Пример POST-запроса. Информация передаётся в теле запроса:

POST /blog/ HTTP/1.1 Host: htmlacademy.ru name1=value1&name2=value2 

GET для безопасных действий, POST для опасных

Говоря совсем просто, GET-запросы лучше не использовать с приватной информацией. Вот почему:

  • Они кешируются. Это значит, что логин и пароль, переданные через GET-запрос, могут остаться в интернете навсегда, например, в веб-архиве или кеше Гугла.
  • Остаются в истории браузера. Чтобы узнать, какие данные отправлялись, достаточно нажать Ctrl+H.
  • Сохраняются в закладках и пересылаются. Можно не обратить внимания и опубликовать в соцсетях или отправить ссылку с приватной информацией в GET-запросе.
  • Сохраняются в логах сервера. Например, нельзя отправлять данные банковских карт через GET-запрос, так как это создаёт риски для пользователей.

Таким образом, любые важные данные — логины, пароли, данные карты, персональные данные — лучше передавать с помощью метода POST . Также метод POST поддерживает тип кодирования данных multipart/form-data , что позволяет передавать файлы.

Ещё раз коротко

GET

  • Фильтры в интернет-магазинах
  • Передача параметров через ссылку
  • Другие безопасные запросы

POST

  • Любые формы с паролями или банковскими картами
  • Формы заявок с персональными данными
  • Отправка файлов

Полезные материалы

  • Тренажёр по работе с методом GET
  • Протокол HTTP
  • Где смотреть запросы. Вкладка Network в Chrome DevTools
  • Механизм безопасной переадресации после POST-запроса (англ.)

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Читать дальше

Как работает протокол HTTP

Как работает протокол HTTP

HTTP был разработан в 1990-х годах для создания первого интерактивного текстового веб-браузера. За эти годы протокол менялся и совершенствовался, становился более гибким и постепенно превратился в современный интернет. В статье рассмотрим принцип работы протокола и что важно знать о нём разработчику.

  • 8 февраля 2023

10 популярных функций в MYSQL, которые вам нужно знать

10 популярных функций в MYSQL, которые вам нужно знать

Без лишних слов принесли вам некоторые популярные функции MySQL, без которых вы точно не обойдётесь в работе.

  • 17 января 2023

Подключение файлов в PHP. Метод require()

Подключение файлов в PHP. Метод require()

Способность вызывать сценарий из отдельного файла по его имени называется в PHP подключением файлов. Подключают PHP-сценарии, любые текстовые файлы или HTML-страницы.

  • 21 ноября 2022

Массивы в PHP

Массивы в PHP

Массив — это ещё один тип данных, вроде числа или строки. Главное отличие массива от остальных типов данных заключается в его способности хранить в переменной больше одного значения. В предыдущих примерах имя переменной всегда ассоциировалось только с одним значением:

  • $name = «Иннокентий»
  • $age = 42

А если мы хотим узнать не только пол, имя и возраст пользователя, но и, допустим, любимые сериалы? Очень непросто назвать один самый любимый сериал, а вот вспомнить несколько — намного легче. Сохранение в переменную-массив нескольких значений выглядит так:

 $fav_shows = ["game of thrones", "american horror story", "walking dead"]; 

В этом примере мы сохранили в переменной $fav_shows сразу три значения. Но сохранить эти данные — это только половина дела. Как с ними потом работать? Уже знакомый вам способ вывода переменной на экран не будет работать с массивами:

Так увидеть список любимых сериалов не получится. Дело в том, что массив — это не обычная переменная. Массив хранит не простые типы, вроде текста или чисел (их ещё называют «скалярными типами»), а более сложную структуру данных, поэтому здесь нужен особый подход.

Внутри массива у каждого значения есть адрес, по которому к нему можно обратиться. Такой адрес называется индексом. Индекс — это просто порядковый номер значения внутри массива. Индексация начинается с нуля, так что первый элемент получает индекс — 0 , второй — 1 , и так далее.

Чтобы получить определенный элемент массива, необходимо знать его индекс (ключ). Напечатаем названия всех сериалов из массива через запятую:

Теперь можно дать определение массива: Массив — это совокупность множества элементов вида «ключ: значение».

Массивы позволяют перезаписывать существующие значения и добавлять новые. Добавить новое значение в массив можно так:

$fav_shows[] = "the big bang theory"; 

Новый элемент автоматически получит индекс равный максимальному индексу из существующих + 1. «Теория большого взрыва» сохранится в массиве под индексом 3 .

Если нам перестал нравиться один из сериалов, так как новый сезон оказался очень плох или появился новый фаворит, значения в массиве можно заменить. Чтобы вычеркнуть старое значение и заменить его новым, нужно присвоить новое значение любому из существующих в массиве индексов:

$fav_shows[4] = "fargo"; 

Для полного удаления (без замены на другое) значения по его индексу существует функция unset :

unset($fav_shows[4]); 
  • 10 ноября 2022

Синтаксис PHP

Синтаксис PHP

Разберёмся, из чего состоит любой язык программирования.

У каждого языка есть правила и конструкции, следуя которым мы выражаем мысли и делаем их понятными для другого человека. В программировании всё точно так же. Но вместо человеческого языка мы используем язык программирования PHP, а в роли нашего собеседника выступает PHP-интерпретатор. Поэтому, чтобы выразить свою мысль, мы должны сделать её понятной для интерпретатора.

  • 27 октября 2022

Массивы $_POST и $_GET в PHP. Обработка форм

Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.

Через формы можно отправлять как простую текстовую информацию, так и файлы.

Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.

HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.

PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:

  • Регистрация и аутентификация пользователя;
  • Отправка комментариев на форумах и социальных сетях;
  • Оформление заказов.

Практически любой современный сайт содержит как минимум несколько разных HTML-форм.

  • 20 октября 2022

Учебник по PHP

Учебник по PHP

  1. Знакомство с языком
    • Что такое PHP
    • Синтаксис PHP
    • Массивы
    • Циклы
    • Функции
  2. Шаблонизация и подключение файлов
    • Подключение файлов
    • Шаблонизация
  3. Протокол HTTP и формы
    • Протокол HTTP
    • Формы
    • Уязвимости
  4. Идентификация пользователя на сайте
    • Аутентификация пользователя
  5. Базы данных
    • База данных
    • SQL
    • MySQL в PHP
    • Безопасность в MySQL
  6. Объекты и использование библиотек
    • Объекты
    • Библиотеки
    • Composer
  • 10 сентября 2022

Протокол HTTP и работа с заголовками

Протокол HTTP и работа с заголовками

Весь современный веб построен на модели взаимодействия клиента и сервера. Как она работает:

  • браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
  • сервер получает запрос и отдаёт клиенту запрошенный контент.

Для реализации процесса используется универсальный протокол HTTP.

  • 10 сентября 2022

Защита от SQL-инъекций

Защита от SQL-инъекций

Внедрение SQL-кода (SQL инъекция) — один из распространённых способов взлома сайтов, работающих с базами данных. Способ основан на внедрении в запрос произвольного SQL-кода. Внедрение SQL позволяет хакеру выполнить произвольный запрос к базе данных (прочитать содержимое любых таблиц, удалить, изменить или добавить данные).

Атака этого типа возможна, когда недостаточно фильтруются входные данные при использовании в SQL-запросах.

  • 10 сентября 2022

Объекты и классы в PHP

Объекты и классы в PHP

Объекты в PHP — это просто ещё один тип данных. Объект позволяет хранить в переменной набор из свойств и их значений, а также встроенные функции. Это делает объекты похожими по своей структуре на ассоциативные массивы. Но отличие от массивов всё-таки есть, и при этом достаточно важное — объекты могут иметь внутреннее состояние.

  • 10 сентября 2022

HTTP Методы GET и POST

Два наиболее часто используемых метода HTTP: GET и POST.

Что такое HTTP?

Протокол передачи гипертекста (HTTP) предназначен для обеспечения связи между клиентами и серверами.

HTTP работает как протокол запрос-ответ между клиентом и сервером.

Веб браузер может быть клиентом, а приложение на компьютере, на котором размещен веб сайт может быть сервером.

Пример: Клиент (браузер) отправляет запрос HTTP на сервер; затем сервер возвращает ответ клиенту. Ответ содержит информацию о состоянии запроса, также может содержать запрошенное содержимое.

Два метода запроса HTTP: GET и POST

Два часто используемых метода для запроса-ответа между клиентом и сервером: GET и POST.

  • GET — Запрашивает данные из указанного ресурса
  • POST — Отправляет данные для обработки указанному ресурсу

Метод GET

Обратите внимание, что строка запроса (пары name/value) отправляется в URL запроса GET:

/test/demo_form.php?name1=value1&name2=value2

Некоторые другие примечания по запросам GET:

  • GET запросы могут быть кэшированы
  • GET запросы остаются в истории браузера
  • GET запросы могут быть в закладках
  • GET запросы никогда не должны использоваться при работе с конфиденциальными данными
  • GET запросы имеют ограничения длины
  • GET запросы следует использовать только для получения данных

Метод POST

Обратите внимание, что строка запроса (пары name/value) отправляется в теле сообщения HTTP запроса POST:

POST /test/demo_form.php HTTP/1.1
Host: schoolsw3.com
name1=value1&name2=value2

Некоторые другие заметки о почтовых запросах:

  • POST запросы не кэшируются
  • POST запросы не остаются в истории браузера
  • POST запросы не могут быть помечены закладками
  • POST запросы не имеют ограничений по длине данных

Сравнение GET и POST

В следующей таблице сравниваются два метода HTTP: GET и POST.

GET POST
Возврат Кнопка/Перезагрузка Безвредный Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка Могут быть закладки Не могут быть закладки
Кэширование Может быть кэширован Не кэшировать
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded или multipart/form-data. Использовать кодировку для двоичных данных
История Параметры остаются в истории браузера Параметры не сохраняются в истории браузера
Ограничения на длину данных Да, при отправке данных метод GET добавляет данные в URL; длина URL адреса ограничена (Максимальная длина URL составляет 2048 символов) Не ограничивать
Ограничения типа данных Только символы ASCII Не ограничивать. Двоичные данные также разрешены
Безопасность GET менее безопасен по сравнению с POST, поскольку отправляемые данные являются частью URL

Другие методы запроса HTTP

В следующей таблице перечислены некоторые другие методы запроса HTTP:

Метод Описание
HEAD То же, что и GET, но возвращает только заголовки HTTP, а не тело документа
PUT Загружает представление указанного URI
DELETE Удаляет указанный ресурс
OPTIONS Возвращает методы HTTP, поддерживаемые сервером
CONNECT Преобразует соединение запроса в прозрачный туннель TCP/IP

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *