当比较HTTP GET和HTTP POST时,从安全角度看有什么不同?其中一个选择是否天生就比另一个更安全?如果有,为什么?
我意识到POST没有公开URL上的信息,但其中有任何真正的价值吗?或者它只是通过隐匿性来实现安全?当安全性是一个问题时,我是否有理由更喜欢POST ?
编辑:
通过HTTPS, POST数据被编码,但url会被第三方嗅探吗?此外,我正在处理JSP;当使用JSP或类似的框架时,是否可以公平地说,最佳实践是避免将敏感数据完全放在POST或GET中,而是使用服务器端代码来处理敏感信息?
这两种方法都不能神奇地为请求提供安全性,但是GET暗示了一些副作用,这些副作用通常会阻止请求的安全性。
GET url显示在浏览器历史记录和web服务器日志中。因此,永远不要将它们用于登录表单和信用卡号之类的内容。
然而,仅仅发布这些数据也不能保证它的安全。为此,您需要SSL。当通过HTTP使用时,GET和POST都以明文形式通过网络发送数据。
POST数据还有其他很好的理由——比如可以提交无限量的数据,或者对普通用户隐藏参数。
缺点是用户不能收藏通过POST发送的查询结果。为此,您需要GET。
这两种方法都不能神奇地为请求提供安全性,但是GET暗示了一些副作用,这些副作用通常会阻止请求的安全性。
GET url显示在浏览器历史记录和web服务器日志中。因此,永远不要将它们用于登录表单和信用卡号之类的内容。
然而,仅仅发布这些数据也不能保证它的安全。为此,您需要SSL。当通过HTTP使用时,GET和POST都以明文形式通过网络发送数据。
POST数据还有其他很好的理由——比如可以提交无限量的数据,或者对普通用户隐藏参数。
缺点是用户不能收藏通过POST发送的查询结果。为此,您需要GET。
免责声明:以下几点仅适用于API调用,不适用于网站url。
网络安全:必须使用HTTPS。在这种情况下,GET和POST同样安全。
浏览器历史记录:对于前端应用程序,如Angular JS, React JS等,API调用是前端进行的AJAX调用。这些不会成为浏览器历史的一部分。因此,POST和GET是同样安全的。
服务器端日志:通过使用写入数据屏蔽和访问日志格式,可以隐藏所有或仅从request-URL中隐藏敏感数据。
浏览器控制台中的数据可见性:对于怀有恶意的人来说,查看POST数据和查看GET数据几乎是一样的。
因此,通过正确的日志记录实践,GET API与POST API一样安全。在所有地方都使用POST,会强制执行糟糕的API定义,应该避免。