2009-06-17 4 views
57

Является ли POST достаточно безопасным для отправки учетных данных?Насколько безопасно HTTP POST?

Или это соединение SSL a должно?

+0

Смотреть предыдущий вопрос (http://stackoverflow.com/questions/1008539/how-secure-is -a-HTTP-GET-когда--данные-это-URL-кодировка). –

+7

Эй, Мэтт, прежде чем вы спросите, да, вам нужно хэш-пароль для входа, который вы храните на сервере. – erickson

+1

Я думаю, что это серьезный вопрос. Посмотрите на другие вопросы Мэтта, и вы увидите, что он, вероятно, новичок, отсюда, казалось бы, наивный вопрос. – JohnFx

ответ

69

SSL является обязательным. POST не более безопасен, чем GET, поскольку он также отправляет незашифрованные. SSL будет охватывать всю HTTP-связь и шифровать передачу данных HTTP между клиентом и сервером.

+6

Должен? Для форума поклонников My Little Pony? Требуется также экранированный терминал с шарниром, квантовое шифрование и тестированная выделенная линия? –

+12

@mgb: Арендуемый? Ты меня разыгрываешь. Если вы не владеете медом на всем пути, как вы можете быть уверены, что это безопасно ?! –

+108

Да, потому что люди используют один и тот же пароль для форума поклонников My Little Pony и их банковского счета. – erickson

5

SSL является обязательным :)

HTTP Post передается в виде обычного текста. Например, загрузите и используйте Fiddler для просмотра HTTP-трафика. Вы можете легко увидеть всю запись там (или через монитор сетевого трафика, такой как WireShark)

2

Нет ... POST недостаточно безопасен. SSL является ДОЛЖНЫ.

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

4

Это не безопасно. POST можно обнюхивать так же легко, как GET.

8

Это зависит от ваших обстоятельств, сколько бы перехват учетных данных стоил кому-то?

Если это просто логин для программного обеспечения Q + A, тогда SSL может не понадобиться, если это сайт онлайн-банкинга или вы храните данные кредитной карты, то это так.
Это бизнес не техническое решение.

+12

downvoted, потому что люди повторно используют пароли. – Malfist

+1

Malfist: люди постоянно используют пароли, но если вы перехватите случайный пароль, знаете ли вы, где еще его использовать? – TheTXI

+2

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

1

POST - открытый текст.

Безопасное соединение является обязательным.

Именно поэтому это называется безопасным подключением.

0

Один запрос POST не является безопасным, потому что все данные «перемещаются» в виде обычного текста.

Для этого вам необходим SSL.

1

Нет, используйте SSL.

С POST значения по-прежнему передаются как обычный текст, если не используется SSL.

0

Данные POST отправляются простым текстом, если вы используете незашифрованное HTTP-соединение. ЕСЛИ это достаточно безопасно, зависит от вашего использования (подсказка: это не так).

Если сервер, клиентская машина и ВСЕ МАШИНЫ МЕЖДУ ИХ являются частью контролируемой, полностью доверенной сети, это может быть нормально.

Вне этих очень ограниченных обстоятельств (а иногда даже и внутри них) обычная аутентификация текста требует неприятностей.

1

Единственная разница между HTTP GET и HTTP POST - это способ кодирования данных. В обоих случаях он отправляется как обычный текст.

Для обеспечения какой-либо безопасности учетных данных для входа требуется HTTPS.

Вам не нужен дорогой сертификат для обеспечения HTTPS.Есть много провайдеров, которые выдадут очень простые сертификаты примерно за 20 долларов США. Более дорогие включают проверку личности, которая больше беспокоит сайты электронной коммерции.

+0

[Startcom] Eddy Nigg (https://www.startcom.org/) выдаст сертификат для [бесплатного] (https://www.startssl.com/?app=25#90). Сертификатам доверяют [большинство браузеров] (https://www.startssl.com/?app=40). Они взимают плату за аннулирование, потому что именно там лежит большая часть затрат. – jww

-3

Зависит от того, где вы его используете и насколько безопасно вам действительно нужно.

Невозможно, чтобы кто-то получил данные POST, которые вы отправляете из своего дома, если вы не используете прокси (TOR), или кто-то нажимает на ваши провода.

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

Если вы банк, вы даже не можете принять такой риск. Если вы являетесь techer с входами для просмотра заданий, то вы должны быть в порядке

+0

Извините за -1, но как это могло быть «не для кого-то», чтобы видеть данные между домом и сервером? –

+0

Пожалуйста, объясните. Этот пост делается для SO с моего домашнего компьютера. Даже если предположить, что вы - Илья - знали мои (и SO) IP-адреса, вы все равно не смогли бы перехватить данные, которые я опубликовал в SO. Вы не можете знать, что там, если вы не можете его перехватить. [И часто, когда вы можете перехватить его, соединение SSL не поможет.] Если вы считаете, что это ошибка, докажите это. – SamGoody

+1

@SamGoody Это демонстрирует полное незнание того, что такое атака «человек в середине», и как SSL ее предотвращает. Я знаю, что это старый комментарий и может больше не отражать ваше нынешнее понимание, если это случай, вы должны удалить его и удалить этот ответ, так как они оба совершенно ошибочны. – meagar

6

HTTP POST не зашифрован, он может быть перехвачен сетевым сниффером, прокси-сервером или просочился в журналы сервера с настраиваемым уровень регистрации. Да, POST лучше, чем GET, потому что данные POST не являются обычно, зарегистрированным прокси или сервером, но это не secure. Чтобы защитить пароль или другие конфиденциальные данные, вы должны использовать SSL или шифровать данные перед POST. Другим вариантом будет использование Digest Authentication с браузером (см. RFC 2617). Помните, что для предотвращения повторных атак недостаточно (для дома) шифрования, вы должны конкатенировать nonce и другие данные (например, realm) до шифрования (см. RFC 2617, как это делается в Digest Auth).

+0

+1 для обозначения различий в регистрации –

2

Самый безопасный способ - не отправлять учетные данные вообще.

Если вы используете Digest Authentication, тогда SSL равен NOT a must.

(NB: Я не подразумеваю, что аутентификация Digest через HTTP всегда более безопасна, чем использование POST через HTTPS).

36

<shameless plug> У меня есть blog post, который детализирует, как выглядит HTTP-запрос, и как запрос GET сравнивается с запросом POST. Ради краткости, GET:

GET /?page=123 HTTP/1.1 CRLF 
Host: jasonmbaker.wordpress.com CRLF 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1 CRLF 
Connection: close CRLF 

и POST:

POST/HTTP/1.1 CRLF 
Host: jasonmbaker.wordpress.com CRLF 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1 CRLF 
Connection: close CRLF 
CRLF 
page=123 

(CRLF это просто перевод строки)

Как вы можете видеть, только различия с точки зрения того, как запрос формируется *, заключается в том, что запрос POST использует слово POST, и данные формы отправляются в тело запроса по отношению к URI. Таким образом, использование HTTP POST - это безопасность безвестности. Если вы хотите защитить данные, вы должны использовать SSL.

* Обратите внимание, что там are other differences.

+6

+1 Для обеспечения визуализации того, почему POST не более безопасен. –

+15

Вы не закрыли свой бесстыдный тэг, компилируете ошибку – Blundell

+18

@Blundell Вы компилируете свой XML? – dimo414

Смежные вопросы