HTTP POST有多安全?


69

POST是否足够安全以发送登录凭据?

还是必须要有SSL连接?


请参阅上一个问题(stackoverflow.com/questions/1008539/…)。
马修·弗拉申

7
嗨,马特,在您询问之前,是的,您需要对存储在服务器上的登录密码进行哈希处理。
erickson

1
我认为这是一个严重的问题。查看Matt的其他问题,您会发现他可能是新手,因此看起来很幼稚。
JohnFx

3
@JohnFX:没问题!
安迪·米库拉

3
这是一个严重的问题。我认为,由于未在查询字符串中传递数据,因此黑客不容易检索到该数据。我仅以登录凭证为例,因为我知道很多人在涉及程序员处理凭证的方式时都会感到担忧。
马特

Answers:


83

SSL是必须的。

POST方法并不比GET安全,因为它也可以通过网络不加密地发送。

SSL将覆盖整个HTTP通信,并对客户端和服务器之间传输的HTTP数据进行加密。


8
必须的?对于My Little Pony粉丝论坛?还需要雷鸟屏蔽终端,量子加密和经过测试的租用线路吗?
马丁·贝克特

13
@mgb:租借?你在开玩笑吧。如果您不完全拥有铜缆,那么如何确定它的安全性呢?
Andy Mikula

132
是的,因为人们为“我的小马驹”粉丝论坛和他们的银行帐户使用相同的密码。
erickson

70
ponygirl88想要一个帐户,妈妈为她创建了一个帐户。妈妈使用与投资帐户相同的用户名和密码。MLP Developer忘记了要求通过SSL进行身份验证。妈妈失去了所有的钱,现在ponygirl88无法上大学。只需使用SSL。
yfeldblum

13
这不是在讽刺。我不确定为什么会这样。这是一个很大的问题;大多数程序员甚至都不了解这个问题,对于那些希望“正常”人担心的问题来说,这是不合理的。
erickson

41

<shameless plug>我有一篇博客文章,详细介绍了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。

*请注意,其他方面的差异


7
+1用于直观地显示POST为什么不再安全的原因。
罗伯·威尔克森

19
@Blundell您编译XML吗?
dimo414

8

这取决于您的情况,截取凭据需要花费多少钱?

如果只是登录软件Q + A站点,则可能不需要SSL;如果是在线银行站点,或者您存储信用卡数据,那么就不需要SSL。
这是一项业务,而不是技术决定。


1
Malfist:人们一直在重复使用密码,但是如果您截取了随机密码,您知道在其他地方使用该密码吗?
TheTXI

2
如果您正在听取流量以获取凭据,则可以看到用户访问的任何站点。SSL不会隐藏地址,而是仅隐藏数据
Jim

1
公平点Malfist –但是,如果X是SSL,则“您必须做X”,单元测试,备份,RAD等问题,而不会质疑成本/收益几乎总是错误的答案。在这种情况下,gumbo向OP指出POST比GET更安全是正确的。
马丁·贝克特

6

HTTP POST未加密,可以被网络嗅探器,代理拦截或以自定义日志记录级别泄漏到服务器的日志中。是的,POST比GET更好,因为POST数据通常不是由代理或服务器记录的,但是它并不安全。要保护密码或其他机密数据,您必须在开机自检之前使用SSL或加密数据。另一种选择是在浏览器中使用摘要式身份验证(请参阅RFC 2617)。请记住,(本地增长)加密不足以防止重放攻击,您必须在加密之前将现时和其他数据(例如,领域)连接起来(有关摘要身份验证的方式,请参阅RFC 2617)。


5

SSL是必须的:)

HTTP Post以纯文本格式传输。例如,下载并使用Fiddler观看HTTP流量。您可以在那里轻松地(或通过WireShark等网络流量监控器)查看整个帖子


4

这是不安全的。可以像GET一样轻松地嗅探POST。



2

最安全的方法是完全不发送凭据。

如果您使用Digest Authentication,那么SSL不是必须的。

(注意:我并不是在暗示基于HTTP的摘要身份验证总是比通过HTTPS进行POST更为安全)。



1

单独的POST请求并不安全,因为所有数据都是以纯文本形式“旅行”的。

您需要SSL以使其安全。



1

HTTP GET和HTTP POST之间的唯一区别是数据的编码方式。在两种情况下,均以纯文本形式发送。

为了为登录凭据提供任何类型的安全性,必须使用HTTPS。

您也不需要昂贵的证书即可提供HTTPS。有许多提供商将以大约20美元的价格发行非常基本的证书。较昂贵的服务包括身份验证,这是电子商务网站更关心的问题。


Eddy Nigg的Startcom免费颁发证书。大多数浏览器都信任它们的证书。他们收取撤销费用,因为这是大部分费用所在。
jww

0

如果您使用的是未加密的HTTP连接,则POST数据将以纯文本格式发送。是否足够安全取决于您的用法(提示:并非如此)。

如果服务器,客户端计算机和它们之间的所有计算机都是受控的,完全受信任的网络的一部分,则可以这样做。

在这些非常有限的情况下(有时甚至在其中),纯文本身份验证会带来麻烦。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.