Безопасна ли строка запроса HTTPS?

ssl https query-string

89137 просмотра

9 ответа

Я создаю безопасный веб-API, который использует HTTPS; однако, если я разрешу пользователям настраивать его (включая отправку пароля) с использованием строки запроса, это также будет безопасно или я должен принудительно сделать это через POST?

Автор: John Источник Размещён: 22.10.2019 07:22

Ответы (9)


424 плюса

Решение

Да, это. Но использование GET для конфиденциальных данных - плохая идея по нескольким причинам:

  • В основном утечка HTTP-реферера (внешнее изображение на целевой странице может привести к утечке пароля [1])
  • Пароль будет храниться в логах сервера (что явно плохо)
  • Кэши истории в браузерах

Поэтому, хотя Querystring защищен, не рекомендуется передавать конфиденциальные данные по строке запроса.

[1] Хотя я должен отметить, что RFC заявляет, что браузер не должен отправлять ссылки из HTTPS в HTTP. Но это не значит, что плохая сторонняя панель инструментов браузера или внешнее изображение / флэш-память с сайта HTTPS не пропустят ее.

Автор: dr. evil Размещён: 27.11.2008 09:11

70 плюса

С точки зрения «анализировать сетевой пакет» запрос GET безопасен, так как браузер сначала устанавливает безопасное соединение, а затем отправляет запрос, содержащий параметры GET. Но URL-адреса GET будут храниться в истории / автозаполнении браузера пользователя, что не подходит для хранения, например, данных пароля. Конечно, это применимо только в том случае, если вы берете более широкое определение «Webservice», которое может получить доступ к службе из браузера, если вы получаете доступ к нему только из своего пользовательского приложения, это не должно быть проблемой.

Поэтому использование сообщений хотя бы для диалогов с паролями должно быть предпочтительным. Также, как указано в ссылке, Littlegeek опубликовал URL GET, более вероятно, будет записан в журналы вашего сервера.

Автор: VolkA Размещён: 27.11.2008 08:29

40 плюса

Да , ваши строки запроса будут зашифрованы.

Причиной этого является то, что строки запросов являются частью протокола HTTP, который является протоколом прикладного уровня, в то время как часть безопасности (SSL / TLS) происходит от транспортного уровня. Сначала устанавливается соединение SSL, а затем параметры запроса (принадлежащие протоколу HTTP) отправляются на сервер.

При установке SSL-соединения ваш клиент выполнит следующие шаги по порядку. Предположим, вы пытаетесь войти на сайт с именем example.com и хотите отправить свои учетные данные, используя параметры запроса. Ваш полный URL может выглядеть следующим образом:

https://example.com/login?username=alice&password=12345)
  1. Ваш клиент (например, браузер / мобильное приложение) сначала разрешит ваше доменное имя example.comв IP-адрес, (124.21.12.31)используя запрос DNS. При запросе этой информации используется только информация, относящаяся к конкретному домену, т.е. только example.comбудет использоваться.
  2. Теперь ваш клиент попытается подключиться к серверу с IP-адресом 124.21.12.31и попытается подключиться к порту 443 (порт службы SSL, а не порт HTTP по умолчанию 80).
  3. Теперь сервер example.comотправит свои сертификаты вашему клиенту.
  4. Ваш клиент проверит сертификаты и начнет обмениваться секретным ключом для вашего сеанса.
  5. После успешного установления безопасного соединения, только тогда параметры вашего запроса будут отправлены через безопасное соединение.

Поэтому вы не будете раскрывать конфиденциальные данные. Однако отправка учетных данных через сеанс HTTPS с использованием этого метода - не лучший способ. Вы должны пойти на другой подход.

Автор: Ruchira Randana Размещён: 28.03.2016 06:52

27 плюса

Да. Весь текст сеанса HTTPS защищен SSL. Это включает в себя запрос и заголовки. В этом отношении POST и GET будут абсолютно одинаковыми.

Что касается безопасности вашего метода, то без надлежащего осмотра нет реального способа сказать.

Автор: shoosh Размещён: 27.11.2008 08:24

23 плюса

Сначала SSL подключается к хосту, поэтому имя хоста и номер порта передаются в виде открытого текста. Когда хост отвечает и вызов успешно выполняется, клиент зашифровывает HTTP-запрос фактическим URL-адресом (т. Е. После третьего слеша) и отправляет его на сервер.

Есть несколько способов сломать эту безопасность.

Можно настроить прокси, чтобы он действовал как «человек посередине». По сути, браузер отправляет запрос на подключение к реальному серверу прокси. Если прокси-сервер настроен таким образом, он будет подключаться через SSL к реальному серверу, но браузер по-прежнему будет взаимодействовать с прокси-сервером. Таким образом, если злоумышленник может получить доступ к прокси-серверу, он может видеть все данные, проходящие через него, в виде открытого текста.

Ваши запросы также будут видны в истории браузера. У пользователей может возникнуть желание сделать закладку на сайте. У некоторых пользователей установлены инструменты синхронизации закладок, поэтому пароль может оказаться на сайте deli.ci.us или в другом месте.

Наконец, кто-то, возможно, взломал ваш компьютер и установил регистратор клавиатуры или скребок для экрана (что делают многие вирусы типа «Троянский конь»). Поскольку пароль виден прямо на экране (в отличие от «*» в диалоговом окне ввода пароля), это еще одна дыра в безопасности.

Вывод: когда дело доходит до безопасности, всегда полагайтесь на проторенный путь. Слишком много всего, о чем вы не знаете, о чем не будете думать и что сломает вам шею.

Автор: Aaron Digulla Размещён: 27.11.2008 08:45

11 плюса

Да, пока никто не смотрит через плечо на монитор.

Автор: Ali Afshar Размещён: 27.11.2008 11:17

10 плюса

Я не согласен с утверждением о [...] утечке реферера HTTP (внешнее изображение на целевой странице может утечь пароль) в ответе Слау .

RFC HTTP 1.1 явно заявляет :

Клиенты НЕ ДОЛЖНЫ включать поле заголовка Referer в (незащищенный) HTTP-запрос, если ссылающаяся страница была передана по безопасному протоколу.

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

Автор: Arnout Размещён: 27.11.2008 09:40

8 плюса

Да, с того момента, как вы установили HTTPS-соединение, все в безопасности. Строка запроса (GET) как POST отправляется по SSL.

Автор: Drejc Размещён: 27.11.2008 08:24

-3 плюса

Вы можете отправить пароль в виде хеш-параметра MD5 с добавлением соли. Сравните это на стороне сервера для аутентификации.

Автор: Amareswar Размещён: 08.11.2012 02:00
Вопросы из категории :
32x32