Насколько безопасен HTTP POST?

Достаточно ли безопасен POST для отправки учетных данных?

Или подключение SSL обязательно?


person Matt    schedule 17.06.2009    source источник
comment
См. Предыдущий вопрос (stackoverflow.com/questions/1008539/).   -  person Matthew Flaschen    schedule 17.06.2009
comment
Привет, Мэтт, прежде чем вы спросите, да, вам нужно хешировать пароль для входа, который вы храните на сервере.   -  person erickson    schedule 17.06.2009
comment
Думаю, это серьезный вопрос. Просмотрите другие вопросы Мэтта, и вы увидите, что он, вероятно, новичок, отсюда, казалось бы, наивный вопрос.   -  person JohnFx    schedule 17.06.2009
comment
@JohnFX: В этом нет ничего плохого!   -  person Andy Mikula    schedule 17.06.2009
comment
Это серьезный вопрос. Я подумал, что, поскольку данные не были переданы в строке запроса, хакерам было нелегко их получить. Я просто использовал учетные данные для входа в систему в качестве примера, потому что знаю, что многие люди обеспокоены тем, как программисты работают с учетными данными.   -  person Matt    schedule 20.06.2009
comment
Только если вы хотите отправлять свои пароли в виде открытого текста.   -  person 3Dave    schedule 14.03.2010
comment
Если я запускаю свой собственный тестовый сервер [используемый для игры с кодом, а не для администрирования] и подключаюсь к нему только со своего рабочего стола, тогда мне не нужно защищать свои учетные данные. Конечно, для всего остального я должен использовать SSH.   -  person SamGoody    schedule 10.02.2014


Ответы (14)


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

Метод POST не более безопасен, чем GET, поскольку он также отправляется по сети в незашифрованном виде.

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

person Gumbo    schedule 17.06.2009
comment
Обязательным? Для фан-форума My Little Pony? Требуются ли также экранированный терминал куропатки, квантовое шифрование и проверенная выделенная линия? - person Martin Beckett; 17.06.2009
comment
@mgb: В аренде? Ты меня разыгрываешь. Если вы не владеете медью полностью, как вы можете быть уверены, что она в безопасности ?! - person Andy Mikula; 17.06.2009
comment
Да, потому что люди используют один и тот же пароль для фан-форума My Little Pony и своего банковского счета. - person erickson; 17.06.2009
comment
ponygirl88 хотела аккаунт, и мама создала его для нее. Мама использовала то же имя пользователя и пароль, что и для своего инвестиционного счета. Разработчик MLP забыл потребовать аутентификацию через SSL. Мама потеряла все деньги, и теперь ponygirl88 не может пойти в институт. Просто используйте SSL. - person yfeldblum; 17.06.2009
comment
@erickson: Я знаю, что это должно было быть саркастичным, но люди действительно используют один и тот же пароль для -всего-, и им трудно запомнить даже это. - person Andy Mikula; 17.06.2009
comment
Это не был сарказм. Я не уверен, почему вы так думаете. Это огромная проблема; большинство программистов даже не осознают проблему, и неразумно ожидать, что нормальные люди будут беспокоиться о ней. - person erickson; 17.06.2009
comment
SSL является обязательным, потому что без него любой может перехватить логин ваших пользователей и получить доступ к этой учетной записи и, возможно, даже к учетной записи уровня администратора. Это происходит постоянно на сайтах форумного типа. Следующее, что вы узнаете, ваш сайт my little pony будет полон рекламы сумок Gucci, и, вероятно, намного хуже. Если вы используете SSL и отправляете логин и конфиденциальную информацию в теле почтового запроса, он будет зашифрован и защищен. Если вы используете запрос GET даже с SSL, эти данные будут в URL-адресе, опять же, каждый сервер между пользователем и местом назначения будет иметь копию этих данных в своих журналах. - person Agile Noob; 11.10.2016
comment
Привет, @MartinBeckett, это СТАРЫЙ комментарий, но, к вашему сведению, Google, Amazon, Facebook объявили, что на данный момент переходят на ВСЕ HTTPS. Google также отдает предпочтение сайтам HTTPS по сравнению с HTTP. По сути, сейчас все переходят на HTTPS, так что вам нужно с этим разобраться;) - person Katie; 01.02.2017
comment
эй, @KatieS, жаль, что теперь они продают ту же информацию, которую мы все пытаемся защитить. Нам нужно перейти на новую платформу, чтобы отвоевать Интернет от мафии Facebook. - person sijpkes; 15.10.2018
comment
@sijpkes очень верно, они берут нашу информацию себе на прибыль! - person Katie; 15.10.2018
comment
И после того, как вы перейдете к использованию SSL / TLS, вы можете начать беспокоиться о том, как защитить данные от кого-то, кто использует такой инструмент, как fiddler, где он перехватывает и декодирует зашифрованный трафик HTTPS, поступающий с локального компьютера ... - person jonchicoine; 21.11.2019

<shameless plug>У меня есть запись в блоге, в которой подробно описано, как выглядит HTTP-запрос. как и как запрос GET сравнивается с запросом POST. Для краткости ПОЛУЧИТЕ:

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.

* Обратите внимание, что есть другие отличия.

person Jason Baker    schedule 17.06.2009
comment
+1 За визуализацию того, почему POST не безопасен. - person Rob Wilkerson; 31.03.2010
comment
@Blundell Вы компилируете свой XML? - person dimo414; 03.07.2012

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

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

person Martin Beckett    schedule 17.06.2009
comment
Малфист: Люди постоянно используют пароли повторно, но если вы перехватите случайный пароль, знаете ли вы, где еще его использовать? - person TheTXI; 17.06.2009
comment
если вы слушаете трафик, чтобы получить учетные данные, вы можете увидеть любой сайт, который посещает пользователь. SSL не скрывает адрес, только данные - person Jim; 17.06.2009
comment
Справедливый вопрос, Малфист, но вы ДОЛЖНЫ сделать X ответов, где X - это SSL, модульное тестирование, резервное копирование, RAD и т. Д., Не подвергая сомнению стоимость / выгоду, почти всегда является неправильным ответом. В этом случае gumbo был прав, указывая OP, что POST не более безопасен, чем GET. - person Martin Beckett; 18.06.2009

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

person user124546    schedule 17.06.2009

SSL обязательно :)

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

person Ken Pespisa    schedule 17.06.2009

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

person driis    schedule 17.06.2009

Нет ... POST совсем не безопасен. SSL НЕОБХОДИМ.

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

person Justin Niessner    schedule 17.06.2009

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

Если вы используете дайджест-аутентификацию, то SSL НЕ обязателен.

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

person ykaganovich    schedule 17.06.2009

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

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

Вот почему это называется безопасным соединением.

person yfeldblum    schedule 17.06.2009

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

Вам нужен SSL, чтобы сделать его безопасным.

person rogeriopvl    schedule 17.06.2009

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

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

person TWA    schedule 17.06.2009

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

HTTPS является обязательным, чтобы обеспечить какую-либо безопасность для учетных данных.

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

person tadman    schedule 17.06.2009
comment
Startcom Эдди Нигга выдаст сертификат для бесплатно. Их сертификатам доверяет большинство браузеров. Они взимают плату за отзыв, потому что именно там лежит большая часть затрат. - person jww; 27.09.2013

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

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

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

person Community    schedule 17.06.2009

Пожалуйста, прочтите эту замечательную статью:

Защита от вредоносных запросов POST

https://perishablepress.com/protect-post-requests/

person SandroMarques    schedule 11.07.2016