GET 与 POST,哪个更安全?

信息安全 Web应用程序 应用安全
2021-09-02 12:02:12

我听说过黑白GETPOST网络应用程序中的编程差异好奇地询问Web 应用程序中哪种GET方法或POST方法更安全,我也希望得到协议方面的答案(即 inhttphttps)?

3个回答

由于几个原因,POST 比 GET 更安全。

GET 参数通过 URL 传递。这意味着参数存储在服务器日志和浏览器历史记录中。使用 GET 时,也可以很容易地更改提交到服务器的数据,因为它就在地址栏中可供使用。

比较两者之间的安全性时的问题是,POST 可能会阻止临时用户,但不会阻止恶意用户。伪造 POST 请求很容易,不应该完全信任。

GET 最大的安全问题不是最终用户的恶意,而是第三方向最终用户发送链接。我不能通过电子邮件向您发送一个强制 POST 请求的链接,但我肯定可以向您发送一个带有恶意 GET 请求的链接。IE:

单击此处获取最佳免费电影!

编辑:

我只是想提一下,您可能应该对大部分数据使用 POST。您只想将 GET 用于应与他人共享的参数,即:/viewprofile.php?id=1234, /googlemaps.php?lat=xxxxxxx&lon=xxxxxxx

POST 只是将信息放在与 GET (url) 不同的位置(请求消息正文)。有些人觉得后者暴露了更多信息,这对于某些观点是正确的(在编辑中阅读)。从攻击者想要拦截您的流量的角度来看,对于攻击者来说,POST 与 GET 一样难/容易。

如果您想要安全性,以便您的请求在离开终点和起点时不会暴露,请使用 SSL (https)。

编辑

Gumbo 和 Ladadada 的一个有效点是,GET 请求的日志记录可能比 POST 请求更频繁地发生。例如在浏览器的历史中(如果您与其他人共享该浏览器)。

因此,这意味着您不应该将敏感数据放入 GET 请求中,因为 GET 请求可能会暴露给正在看屏幕的人。

正如@Gumbo 所说,URL 被记录并出现在更多地方,因此 GET 请求比 POST 请求更不安全。关键是很多人认为 POST 请求比 GET reqs 更安全,因为他们可以直接在 URL 中看到数据,但是使用例如拦截浏览器请求的代理软件,任何人都可以查看和更改 POST 数据。

另一点是你必须考虑在哪里使用 GET 和 POST,因为GET 应该只用于不改变数据库信息的操作,只请求或读取信息,当数据将被改变时应该使用 POST 数据。一些网络扫描器会自动点击每个链接(通常是 GET 请求)而不是按钮或表单(通常是 POSTS 请求),以避免更改数据库,但如果您在链接后进行删除操作,您就有可能点击链接通过更自动化的工具更容易。

显然,网络扫描仪也可以“单击”或跟随按钮和表单,但通常它们会有所不同,并且可以修改此行为以安全地蜘蛛网络。