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

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

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


当前回答

甚至POST也接受GET请求。假设您有一个表单,其中有user.name和user这样的输入。Passwd,这些应该支持用户名和密码。如果我们简单地添加?user.name="my user&user. name="Passwd =“我的密码”,则请求将通过“绕过登录页面”被接受。

对此的解决方案是在服务器端实现过滤器(java过滤器作为e),并检测到没有字符串查询作为GET参数传递。

其他回答

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请求。

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

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

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

安全的概念是没有意义的,除非你定义了你想要防范的是什么。

如果您希望对存储的浏览器历史记录、某些类型的日志记录以及查看您的url的人保持安全,那么POST更安全。

如果您希望安全防范某人嗅探您的网络活动,那么没有什么区别。

我通常的选择方法是:

GET用于稍后将通过URL检索的项 例如,搜索应该是GET,所以你可以做Search .php?s=XXX POST将被发送的项目 与GET相比,这是相对不可见的,并且更难发送,但数据仍然可以通过cURL发送。