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

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

还是 SSL 连接是必须

【问题讨论】:

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

标签: security post httpwebrequest xmlhttprequest


【解决方案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 等网络流量监视器)

                    【讨论】:

                      猜你喜欢
                      • 2011-01-16
                      • 2016-04-29
                      • 2011-01-06
                      • 1970-01-01
                      • 2012-01-15
                      • 1970-01-01
                      • 2011-04-28
                      • 2014-06-26
                      相关资源
                      最近更新 更多