加密GET和POST数据有什么区别?谢谢答案
编辑:我需要更具体地编写它。
当https-SSL加密这两种方法时,浏览器执行此操作的方式有何不同。 哪些部分是加密的,哪些不是? 我在某处读到,目标网址在POST中未加密,是真的吗? 如果它在GET中是真的并且相同,那么所有参数都在哪里?
Edit2:我的问题仍然不知道答案。当两种方法都使用相同的数据加密时,嗅探时看起来是否相同?哪些部分是加密的,哪些不是?
答案 0 :(得分:51)
GET 数据作为查询字符串附加到网址:
https://example.com/index.html?user=admin&password=whoops
由于数据已附加到网址,因此您可以传输的数据硬限制。不同的浏览器有不同的限制,但你会开始遇到1KB-2KB标记的问题。
POST 数据包含在HTTP请求的正文中,并且在网址中不可见。因此,您可以通过POST传输的数据量没有限制。
如果HTTP连接使用SSL / TLS,则 GET参数也会加密,但可以显示在其他位置,例如Web服务器日志,浏览器插件和其他应用程序可能会访问同样。 POST数据已加密,并且不会以任何其他方式泄露。
URL查询中包含的数据 HTTPS连接已加密。 然而,这是非常糟糕的做法 包括如此敏感的数据 'GET'请求中的密码。而 它无法拦截数据 将以明文登录 接收HTTPS上的serverlogs 服务器,很可能也在 浏览器历史。它可能也是 可用于浏览器插件和 甚至可能是其他应用程序 客户端计算机。
如果您想安全传输信息,请始终使用POST over HTTPS 。
如果您使用加密库来加密数据,那么您可以使用GET或POST,但这会增加额外的痛苦,您可能无法正确设置加密,所以我仍然建议使用POST通过HTTPS,而不是滚动自己的加密设置。这个问题已经解决了,不要重新发明轮子。
您可能需要考虑的其他选项是使用安全Cookie 。设置了安全标志的cookie仅通过安全通道(如HTTPS)发送,并且不可嗅探。这是一种安全地保留信息的好方法,例如会话ID。
答案 1 :(得分:3)
不同之处在于,使用GET动词发送的加密参数将在地址栏中显示,而使用POST动词发送的参数不会(当然这并不意味着用户无法看到加密值) 。另一个区别在于允许的最大长度:GET请求受限,因为在浏览器中URL受限。第三个区别:GET请求记录在它们传输的中间Web服务器(Web,代理,...)中,因此如果您通过Internet使用GET,您的加密参数肯定会在到达您的Web服务器之前记录在许多计算机上。
答案 2 :(得分:3)
发出HTTPS GET请求时,查询字符串参数是加密的!在HTTPS请求中唯一未加密的是服务器名称或请求的IP地址和端口。这些是将请求从浏览器路由到Web服务器所需的唯一两条信息,然后执行解密。
使用Fiddler(关闭SSL解密)并使用安全网站查看您的流量。您将看到无法查看未加密的查询字符串数据甚至路径信息。
答案 3 :(得分:0)
POST可以发送比GET更多的数据
恶意用户更容易操纵数据
GET未加密
POST未加密
答案 4 :(得分:0)
如果您可视化HTTP请求可能会有所帮助:
GET /page.php?get-data-here HTTP/1.1
Host: www.site.com
post-data-here
使用HTTPS时,整个事情都会被加密。