【问题标题】:password sent via post secure? [duplicate]通过邮政安全发送密码? [复制]
【发布时间】:2011-03-22 04:50:51
【问题描述】:

可能重复:
How secure is a HTTP POST?

假设我在 php 中有一个登录页面,用户需要输入他的姓名和密码。在这种情况下,form method 是帖子。

现在有人(我的朋友)告诉我,输入并发送到服务器的信息(用户名和密码)可以通过获取生成的结果页面的标题被黑客入侵。因此,您应该加密标头,这就是使用 HTTPS 的原因。

这对我来说没有意义,因为我认为通过 post 方法发送的信息(用户名和密码)是完全安全的,并且仅通过头部黑客攻击就无法访问用户名和密码。

我的朋友说得对吗?如果没有,有没有办法为无法访问代码的人做这些事情? 如何通过 HTTPS 发送我的私人信息(页面以 php 编码)?

编辑:

通过get 方法的数据通过标头发送。正确的?通过post 的数据是否也通过标头发送?

【问题讨论】:

  • @sAc:通过get方法的数据是通过header发送的。正确的?通过post的数据也是通过header发送的吗?
  • @user242265:是的,这是真的 :)
  • @sAc:但是有人告诉我,通过 post 的数据被封装在一些隐藏字段中,该字段不通过 h​​eader 传递。如果信息不是通过 header 传递的,那么信息是如何传递的?
  • @user242265:在请求正文中传递,但用于发送数据的确切结构并不重要;标题和正文都是明文,因此不安全。

标签: php header


【解决方案1】:

如果您只是通过 POST 发送密码,则您的密码安全 - 仍然可见且未加密,尽管不太明显。

通过 POST 发送未加密的密码是最不安全的,但仍然相对合理。 (是的,有一些不太安全的方法,但这些方法完全是疯狂的——通过 GET 发送密码表单与在电视上广播或在报纸上打印密码一样安全。

这是典型的 GET 请求的样子:

GET http://somedomain.example.com/path/file?here=are&the=GET&parameters=.
X-Some-Header: header content
X-Another-Header: 1

这是一个类似的 POST 请求(请注意,您可以在 POST 请求中同时发送 GET 和 POST 参数):

POST http://somedomain.example.com/path/file?here=are&the=GET&parameters=.
X-Some-Header: header content
X-Another-Header: 1
Content-Length: 40

with_POST&=the&content=is&here_in=the&request=body

如您所见,HTTP 是一个完全纯文本的协议 - 没有对数据执行加密,因此任何人都可以在传输过程中查看和/或修改它。完全不需要访问代码 - 只需查看流量,您的数据就会在那里,任何人都可以看到(您可以使用 Wireshark 等工具验证这一点,它允许您查看网络流量)。

为了消除这种信任整个世界的需要,创建了 HTTPS(S 代表 Secure),它提供加​​密(“只有发送者和接收者可以读取它”)和身份验证(“服务器确实是 yourserver.example. com,而不是 evilserver.example.net")。

HTTPS 是 HTTP 的包装器:在 HTTP 中,客户端连接到 Web 服务器并开始对话,HTTPS 首先建立一个安全的 SSL 隧道,然后 HTTP 通信通过它。设置 HTTPS 服务器比 HTTP 稍微复杂一些,参见例如this article.

【讨论】:

  • 通过get 方法的数据通过header 发送。正确的?通过post 发送的数据是否也通过header 发送?
  • @user242265:不,不。 GET 数据在 URL 中发送,POST 数据在请求正文(而不是标头)中发送。用一个例子编辑了我的答案。
【解决方案2】:

没有 SSL,通过POST 发送的数据等同于通过GET 发送的数据,或者换句话说,根本没有加密。

【讨论】:

  • 不太等价。如果通过 GET 发送,即使在 SSL 连接上它仍然是明文。
  • 对不起,我的意思是这两个陈述是两个独立的想法,我会编辑。
  • @JohnFx:是的——通过 GET 发送数据太疯狂了:它会被存储在访问日志和其他地方。
  • @JohnFX:GET 标头中的 URL 已加密,就像 HTTP over SSL/TLS(“HTTPS”)中的其余数据一样。 HTTP 和 TLS 是独立的层。您如何确定通过 GET 传输的密码在通过 HTTPS 发送时未加密?
  • @bowenl2:他们是。但是,URL 大多被视为非敏感资源;您绝对不想在您的网络服务器日志中看到这一点:https://example.com/login?name=Piskvor&password=hunter2,(更不用说某人的网站统计信息或 Google Analytics)。
【解决方案3】:

您可以使用 Wireshark 读取提交的数据 - http://de.wikipedia.org/wiki/Wireshark 如果您在没有 https 的情况下发送表单数据。

【讨论】:

    【解决方案4】:

    我认为信息(用户名 和密码)通过邮寄方式发送是 完全安全

    错了。通过 POST 发送的数据实际上与通过 GET 发送的数据一样不安全。唯一的(边际)区别是 GET 数据稍微更“可访问”,通过 urls 历史和日志。但是如果有人可以嗅探到链接,他可以很容易地窥探通过 http 请求(POST 或 GET)发送的用户和密码除非使用 SSL (https://)。

    【讨论】:

    • 通过get方法的数据是通过header发送的。正确的?通过post的数据也是通过header发送的吗?
    • POST 数据未在 http 标头中发送。这在安全性方面的差异为零。
    【解决方案5】:

    我相信提交表单的 php 脚本,并且表单本身需要位于使用 SSL 设置的网络服务器上的目录中。您还必须为该网站启用 SSL 证书。

    【讨论】:

      【解决方案6】:

      来自Wikipedia

      HTTP 不安全,受制于 中间人和窃听 可以让攻击者获得收益的攻击 访问网站帐户和 敏感信息。 HTTPS 是 旨在抵御此类攻击和 被认为是安全的 攻击。

      如果您担心有人截获您的数据,请使用 HTTPS。

      【讨论】:

      • 您仍然可以对 SSL 连接发起中间人攻击。例如,如果我可以访问主机或客户端的网络,那么执行 ARP 中毒攻击从而通过我的计算机重定向流量并创建代理就变得微不足道了。因此,例如,如果您访问“gmail.com”,我的计算机就会请求该站点并将其转发到目标计算机。如果用户很聪明并且留意大多数浏览器现在显示的小锁,他们会注意到它是自签名的,而不是由 Google 签名的。没有多少人注意到会议中期。
      • 这将如何工作,您的代理不能假装是 gmail.com,因为它没有私钥。这几乎完全是 SSL 应该防止的情况。
      • @Peter Hanneman:自签名 -> 不在浏览器的 CA 列表中 -> “无效证书”警告,而不是“只是一个锁图标”; OTOH @JB: 1. 代理提供了一个虚假的 HTTPS gmail 登录页面 2. 浏览器抛出关于“无效证书”的可怕警告 3. 用户点击“ok ok yes yes allow ok”甚至没有阅读对话框,只是为了让吓人警告消失。 4. 利润!!!
      • 是的,代理计算机会创建一个伪造的自签名证书。较新的浏览器(例如 Chrome)会提醒您发生了一些有趣的事情,但就像 Poskvor 说的那样,大多数人不会注意,只会单击“是”并接受自签名证书。精通技术的用户可能是安全的,但您无法防止愚蠢。发起此类攻击的黄金时间是用户可能已经登录后的会话中期。即使您在发送出去之前没有捕获通常在客户端散列的用户名/密码,您仍然可以劫持会话。
      • 大多数使用 HTTPS 来打电话回家的应用程序,例如 Adob​​e Flash 或 Air 应用程序,通常不会被告知在遇到自签名证书时执行任何特殊操作,并且会自动接受它,即只是愚蠢,因为他们甚至没有提示用户潜在的问题。安全浏览互联网的唯一安全解决方案是创建与物理安全计算机的 SSH 连接并浏览该计算机。
      猜你喜欢
      • 2017-08-30
      • 2010-12-07
      • 2020-02-07
      • 2012-03-16
      • 1970-01-01
      • 2018-02-04
      • 2010-11-05
      • 2013-08-17
      • 2017-01-10
      相关资源
      最近更新 更多