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

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

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


当前回答

区别在于GET发送数据是开放的,而POST是隐藏的(在http-header中)。

所以get更适合于不安全的数据,比如谷歌中的查询字符串。Auth-data永远不会通过GET发送,所以在这里使用POST。当然,整个主题有点复杂。如果你想阅读更多,请阅读这篇文章(德语)。

其他回答

免责声明:以下几点仅适用于API调用,不适用于网站url。

网络安全:必须使用HTTPS。在这种情况下,GET和POST同样安全。

浏览器历史记录:对于前端应用程序,如Angular JS, React JS等,API调用是前端进行的AJAX调用。这些不会成为浏览器历史的一部分。因此,POST和GET是同样安全的。

服务器端日志:通过使用写入数据屏蔽和访问日志格式,可以隐藏所有或仅从request-URL中隐藏敏感数据。

浏览器控制台中的数据可见性:对于怀有恶意的人来说,查看POST数据和查看GET数据几乎是一样的。

因此,通过正确的日志记录实践,GET API与POST API一样安全。在所有地方都使用POST,会强制执行糟糕的API定义,应该避免。

Neither one of GET and POST is inherently "more secure" than the other, just like neither one of fax and phone is "more secure" than the other. The various HTTP methods are provided so that you can choose the one which is most appropiate for the problem you're trying to solve. GET is more appropiate for idempotent queries while POST is more appropiate for "action" queries, but you can shoot yourself in the foot just as easily with any of them if you don't understand the security architecture for the application you're maintaining.

最好是阅读第9章:HTTP/1.1 RFC的方法定义,以全面了解get和POST最初的含义。

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

RFC7231:

uri的目的是共享的,而不是安全的,即使它们被识别 获取资源。uri通常显示在添加到的显示器上 模板当一个页面被打印出来,并存储在各种 未受保护的书签列表。因此,包括 URI中的敏感信息、个人身份信息、 或者是要暴露的风险。

服务的作者应该避免在提交时使用基于get的表单 敏感数据,因为这些数据将放在 请求目标。许多现有的服务器、代理和用户代理都有日志记录 或者将请求目标显示在可以看到它的地方 第三方。这样的服务应该使用基于post的表单提交 相反。”

这个RFC明确指出不应该使用GET提交敏感数据。由于这句话,一些实现者可能不会同样小心地处理从GET请求的查询部分获得的数据。我自己也在研究一个保证数据完整性的协议。根据这个规范,我不应该保证GET数据的完整性(我将这样做,因为没有人遵守这些规范)

Post与安装SSL一起是最安全的,因为它在消息体中传输。

但所有这些方法都是不安全的,因为它下面使用的7位协议可以通过擒纵被破解。即使是通过四级网络应用防火墙。

套接字也不能保证…尽管它在某些方面更安全。