当比较HTTP GET和HTTP POST时,从安全角度看有什么不同?其中一个选择是否天生就比另一个更安全?如果有,为什么?

我意识到POST没有公开URL上的信息,但其中有任何真正的价值吗?或者它只是通过隐匿性来实现安全?当安全性是一个问题时,我是否有理由更喜欢POST ?

编辑: 通过HTTPS, POST数据被编码,但url会被第三方嗅探吗?此外,我正在处理JSP;当使用JSP或类似的框架时,是否可以公平地说,最佳实践是避免将敏感数据完全放在POST或GET中,而是使用服务器端代码来处理敏感信息?


当前回答

这与安全无关,但是……浏览器不缓存POST请求。

其他回答

修改POST请求更加困难(它需要比编辑查询字符串更多的努力)。编辑:换句话说,它只是通过模糊来保证安全,而且几乎不是这样。

你也应该意识到,如果你的网站包含链接到其他外部网站,你不控制使用GET将把数据放在外部网站的引用头,当他们按下你的网站上的链接。因此,通过GET方法传输登录数据总是一个大问题。因为这可能会暴露登录凭据,以便通过检查日志或查看谷歌分析(或类似)轻松访问。

这两种方法都不能神奇地为请求提供安全性,但是GET暗示了一些副作用,这些副作用通常会阻止请求的安全性。

GET url显示在浏览器历史记录和web服务器日志中。因此,永远不要将它们用于登录表单和信用卡号之类的内容。

然而,仅仅发布这些数据也不能保证它的安全。为此,您需要SSL。当通过HTTP使用时,GET和POST都以明文形式通过网络发送数据。

POST数据还有其他很好的理由——比如可以提交无限量的数据,或者对普通用户隐藏参数。

缺点是用户不能收藏通过POST发送的查询结果。为此,您需要GET。

POST在安全性方面较差的一个原因是GET在默认情况下被记录,参数和所有数据几乎都被你的web服务器记录。

POST则相反,它几乎没有被记录,导致很难发现攻击者的活动。

我不相信“它太大了”的说法,这不是不记录任何东西的理由,至少1KB,这对人们识别攻击者很有帮助,直到它出现,然后POST做了双重破坏服务,通过启用任何基于HTTP的后门来无声地传递无限数量的数据。

就安全性而言,它们本质上是相同的。虽然POST确实不通过URL公开信息,但它在客户机和服务器之间的实际网络通信中公开的信息与GET一样多。如果需要传递敏感信息,那么第一道防线就是使用Secure HTTP传递。

GET或查询字符串帖子对于标记特定项目或协助搜索引擎优化和索引项目所需的信息非常有用。

POST适用于用于提交一次性数据的标准表单。我不会使用GET来发布实际的表单,除非在搜索表单中,您希望允许用户将查询保存在书签中,或者类似的东西。