GET 和 POST 加密有啥区别?

Posted

技术标签:

【中文标题】GET 和 POST 加密有啥区别?【英文标题】:What is the difference between GET and POST encryption?GET 和 POST 加密有什么区别? 【发布时间】:2011-03-05 01:26:51 【问题描述】:

加密 GET 和 POST 数据有什么区别?

更具体地说:当https-SSL对这两种方法都进行加密时,浏览器这样做的方式有什么不同;哪些部分已加密,哪些未加密?

我在某处读到目标 url 未在 POST 中加密,这是真的吗? 如果在 GET 中为 true 且相同,那么所有的参数在哪里?

当两种方法都使用相同的数据加密时,它们在嗅探时看起来是否相同?哪些部分已加密,哪些未加密?

【问题讨论】:

除了你必须对 GET 的加密结果进行 URL 编码之外......我什么都看不到。 @Rowland Shaw - 我假设他们在将值发送回服务器之前对其进行了加密。如果他们在谈论编码,那会更有意义。 如果您使用 SSL,所有内容都会被加密。这包括 url、查询字符串、请求和响应标头以及帖子正文中的数据。 GET 和 POST 都是加密的,它们之间没有区别。见***.com/questions/499591/are-https-urls-encrypted 【参考方案1】:

GET 数据作为查询字符串附加到 URL

https://example.com/index.html?user=admin&password=whoops

由于数据附加到 URL,您可以传输的数据量有一个硬性限制。不同的浏览器有不同的限制,但你会开始遇到 1KB-2KB 左右的问题。

POST 数据包含在 HTTP 请求的正文 中,在 URL 中不可见。因此,您可以通过 POST 传输的数据量没有限制。

如果 HTTP 连接使用 SSL/TLS,那么 GET 参数也会被加密,但可以显示在其他地方,例如网络服务器日志,并且可以被浏览器插件和可能的其他应用程序访问也是。 POST 数据已加密,不会以任何其他方式泄漏。

来自Google Discussion:

URL 查询中包含的数据 HTTPS 连接已加密。 但是,这是非常糟糕的做法 包括这样的敏感数据 'GET' 请求中的密码。尽管 它不能被截获,数据 将以明文形式记录 接收 HTTPS 上的服务器日志 服务器,很可能也在 浏览器历史。大概也是 可用于浏览器插件和 甚至可能还有其他应用程序 客户端计算机。

如果您想安全地传输信息,请始终使用 POST over HTTPS

如果您使用加密库来加密数据,那么您可以使用 GET 或 POST,但这会带来额外的痛苦,并且您可能无法正确设置加密,所以我仍然建议使用 POST通过 HTTPS, 而不是滚动您自己的加密设置。这个问题已经解决了,不要再造***了。

您可能要考虑的另一个选项是使用安全 cookie。设置了安全标志的 cookie 仅通过安全通道(例如 HTTPS)发送,并且不可嗅探。这是安全保存信息(例如会话 ID)的好方法。

【讨论】:

错了。 GET 请求也被加密,包括查询字符串 - ***.com/questions/499591/are-https-urls-encrypted DNS 请求将包括完整的 URL 并且可以被嗅探。 GET 参数也将显示在日志中。 DNS请求只包含域名,不包含url参数。此外,即使是 POST 请求也需要 DNS 查找。日志将包含 url 参数 - 日志只能由服务器访问,服务器也可以读取发布的任何数据。 SSL 旨在防止中间人攻击,无论是 GET 还是 POST,它都能实现这一点。 @SripathiKrishnan 您的大部分观点都很好,但您关于日志的观点具有误导性。允许某人读取日志的漏洞并不一定允许他们嗅探和解密网络流量,或以任何其他方式破坏服务器。此外,如果一个坏人只控制服务器几分钟,如果你的日志包含敏感信息,那么每个人都非常糟糕。如果他们不这样做,每个人都不太可能被搞砸。【参考方案2】:

发出 HTTPS GET 请求时,查询字符串参数已加密! HTTPS 请求中唯一未加密的是请求的服务器名称或 IP 地址和端口。这些是将请求从浏览器路由到 Web 服务器所需的仅有的两条信息,然后由 Web 服务器执行解密。

使用Fiddler(关闭 SSL 解密)并通过安全站点查看您的流量。您会看到无法查看未加密的查询字符串数据甚至路径信息。

【讨论】:

【参考方案3】:

如果您可视化 HTTP 请求可能会有所帮助:

GET /page.php?get-data-here HTTP/1.1
Host: www.site.com

post-data-here

当你使用 HTTPS 时,整个事情都是加密的。

【讨论】:

【参考方案4】:

POST 可以发送比 GET 更多的数据

GET 更容易让恶意用户操纵数据

GET 未加密

POST 未加密

【讨论】:

【参考方案5】:

不同之处在于,使用 GET 动词发送的加密参数将在地址栏中可见,而使用 POST 动词发送的参数则不会(当然这并不意味着用户看不到加密值) .另一个区别是允许的最大长度:GET 请求受到限制,因为 url 在浏览器中受到限制。第三个区别:GET 请求记录在它们传输的中间网络服务器(网络、代理、...)中,因此如果您通过 Internet 使用 GET,您的加密参数肯定会在它到达您的网络服务器之前记录在许多机器上。

【讨论】:

...但这与没有加密的 POST/GET 没有什么不同。我没有看到加密会带来什么不同。

以上是关于GET 和 POST 加密有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

$_POST、$_GET 和 $_REQUEST 之间有啥区别?

HTTP方法GET,POST,PUT和DELETE有啥区别

php中的表单提交方式get和post有啥区别?

页面请求方式都有哪些?分别有啥区别

jsp调用servlet时get方法和post方法有啥区别?

asp.net页面的提交方式POST和GET有啥区别?