HTTP POST 的安全性如何?

Posted

技术标签:

【中文标题】HTTP POST 的安全性如何?【英文标题】:How secure is a HTTP POST? 【发布时间】:2010-11-03 18:23:35 【问题描述】:

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

还是 SSL 连接是必须

【问题讨论】:

查看上一个问题 (***.com/questions/1008539/…)。 嘿,马特,在你问之前,是的,你需要对存储在服务器上的登录密码进行哈希处理。 我认为这是一个严肃的问题。看看马特的其他问题,你会发现他可能是个新手,所以这个看似幼稚的问题。 @JohnFX:这没什么错! 这是一个严肃的问题。我认为由于数据没有在查询字符串中传递,因此黑客不容易检索到。我只是以登录凭据为例,因为我知道很多人对程序员处理凭据的方式感到担忧。 【参考方案1】:

SSL 是必须的。

POST 方法并不比 GET 更安全,因为它也是通过网络未加密发送的。

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

【讨论】:

必须吗?对于我的小马驹粉丝论坛?是否还需要雷鸟屏蔽终端、量子加密和经过测试的专线? @mgb:租用?你一定是在开玩笑吧。如果你没有一直拥有铜,你怎么能确定它是安全的?! 是的,因为人们在 My Little Pony 粉丝论坛和他们的银行账户上使用相同的密码。 ponygirl88 想要一个帐户,妈妈为她创建了一个帐户。妈妈使用的用户名和密码与她用于投资账户的用户名和密码相同。 MLP 开发人员忘记要求通过 SSL 进行身份验证。妈妈失去了所有的钱,现在 ponygirl88 不能上大学了。只需使用 SSL。 这不是讽刺。我不知道你为什么会这么认为。这是一个大问题;大多数程序员甚至都没有意识到这个问题,对于那些期望“正常”人担心它的人来说,这是不合理的。【参考方案2】:

请看这篇精彩的文章:

防止恶意 POST 请求

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

【讨论】:

【参考方案3】:

<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 / 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。

【讨论】:

+1 用于提供 POST 为何不再安全的可视化。 @Blundell 你编译你的 XML?【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

(注意:我并不是说基于 HTTP 的摘要式身份验证总是比使用基于 HTTPS 的 POST 更安全)。

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

Eddy Nigg 的Startcom 将为free 颁发证书。他们的证书受到most browsers 的信任。他们收取撤销费用,因为这是大部分费用所在。【参考方案7】:

如果您使用未加密的 HTTP 连接,则以纯文本形式发送 POST 数据。 如果这足够安全取决于您的使用情况(提示:不是)。

如果服务器、客户端机器和它们之间的所有机器都是受控的、完全受信任的网络的一部分,这可能没问题。

在这些非常有限的情况之外(有时甚至在其中)纯文本身份验证正在自找麻烦。

【讨论】:

【参考方案8】:

不,使用 SSL。

使用 POST 时,除非使用 SSL,否则值仍以纯文本形式提交。

【讨论】:

【参考方案9】:

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

您需要 SSL,以确保其安全。

【讨论】:

【参考方案10】:

POST 是明文。

安全连接是必须的。

这就是为什么它被称为安全连接。

【讨论】:

【参考方案11】:

这取决于您的具体情况,截获凭据会花费多少人?

如果只是登录软件问答网站,则可能不需要 SSL,如果是在线银行网站或您存储信用卡数据,则可以。 这是一项业务而非技术决策。

【讨论】:

Malfist:人们一直在重复使用密码,但如果你截获一个随机密码,你知道还能在哪里使用它吗? 如果您正在监听流量以获取凭据,您可以看到用户访问的任何站点。 SSL 不隐藏地址,只隐藏数据 公平点 Malfist - 但是,“你必须做 X”回答 X 是 SSL、单元测试、备份、RAD 等而不质疑成本/收益几乎总是错误的答案。在这种情况下,gumbo 正确地向 OP 指出 POST 并不比 GET 更安全。【参考方案12】:

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

【讨论】:

【参考方案13】:

不...POST 根本不够安全。 SSL 是必须的。

POST 仅有效地隐藏查询字符串中的参数。任何查看浏览器和端点之间的流量的人仍然可以获取这些参数。

【讨论】:

【参考方案14】:

SSL 是必须的 :)

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

【讨论】:

以上是关于HTTP POST 的安全性如何?的主要内容,如果未能解决你的问题,请参考以下文章

ab压力测试 http协议中post请求 1000次请求 500并发 为啥请求会增多

HTTP中get请求与post请求区别

Android 中的安全 HTTP Post

请详细解说下php关于post传值和get传值的内容,区别,安全性,大小等。

get和post的差异

http请求中get和post请求的区别