http POST和http GET之间的澄清[关闭]

Posted

技术标签:

【中文标题】http POST和http GET之间的澄清[关闭]【英文标题】:Clarification between http POST and http GET [closed] 【发布时间】:2013-01-11 14:01:51 【问题描述】:

我已经阅读了大量关于 http 帖子和 http get 方法之间区别的文章。我只是对这两者中哪一个在安全性方面是更好的选择感到困惑。因为,有些文章说最好使用post方法而不是get,因为它不允许在url中显示数据。但是也有人说最好用get,因为它不参与数据的更新,它只是用来读取数据并显示它们。那么,我应该选择两者中的哪一个?还是我理解正确?请帮忙,我需要在这里澄清一下...谢谢!

【问题讨论】:

使用http post,更安全 这里发生了什么,谁给出了这些负利率,为什么? @VahidFarahmand:公平地说,到目前为止,大多数答案都是垃圾(但我没有投反对票......) 我什至不明白为什么其他人投票反对?我只是问问大家的意见。感谢那些回答的人。 @nsutgio:反对票通常用于表达认为答案错误或具有误导性的信念。 【参考方案1】:

GET 和 POST 是方法/动词,并且——正如口语中的动词和编程语言中的方法——它们表示动作。您应该选择最适合该操作的方法。

以definitions开头:

获取

GET 方法意味着检索任何信息(以 entity) 由 Request-URI 标识

发布

POST 方法用于请求源服务器接受 包含在请求中的实体作为资源的新下属 由 Request-Line 中的 Request-URI 标识。

概括地说,GET 应该检索,POST 应该创建或更新。选择的方法与安全无关;既可以得到适当保护,也可以完全不安全。

换句话说:仅仅因为 POST 似乎“隐藏”了数据并不意味着它更安全。

我建议您也阅读一下REST principles。

我会进一步建议阅读Idempotence and Safe methods。请参阅§ 9.1 of the spec 了解幂等性和无能性对 HTTP 的直接应用。

【讨论】:

我要补充一点关于安全性的内容:如果不使用 SSL (https),​​GET 和 POST 都可以被拦截和读取(通过中间人攻击),这使得它们都不安全。 (如果您使用 SSL)我们可以说 POST 更安全,因为您的系统(Apache 或...)不会完全记录请求,而 GET 请求将使用日志文件中的所有参数写入。所以这意味着如果你的服务器受到攻击并且读取了日志,好的,POST 更安全。但我想你会有其他顾虑。 @maxdec - 我想我的观点是,公认的做法是使用适合操作的动词,然后正确保护应用程序。但是您的观点绝对是实现该安全性的有效考虑因素。 @TimMedora:我完全同意。已选择有意义的名称(POST、GET、UPDATE...)。【参考方案2】:

POST 或 get 并没有真正影响安全性,如果您的代码容易受到注入,POST 或 GET 方法不会有任何影响,甚至您可以说 GET 更安全,因为 GET URL 将完全记录在日志文件中如果您的代码中有注入,您可以在日志文件中找到整个注入代码/部分,但不会记录 POST 数据。

POST 没有限制,支持多篇文章,所以你可以使用 POST 来上传文件等。但是 GET 参数在 apache 中默认有 8000 个字符的限制。

POST 将使您的 URL 看起来更清晰,并且您的参数将被隐藏。

【讨论】:

【参考方案3】:

POST 和 GET 是两种HTTP Request methods,最初用于POST(提交)数据和GET(检索)数据。这被REST 大量使用,以及更多的请求方法(如PUTDELETE)。这就是 POST 和 GET 之间的实际区别。

对于网页上的表单,也使用 POST 和 GET。就安全性而言,这并不重要:两者都可以被客户端读取。唯一的区别是使用 GET 更容易,因为用户可以查看 URL 中的参数。使用 POST,您需要从 HTTP 请求正文 (More Details) 中提取参数。

底线:这主要取决于您想要做什么:您是否希望用户复制 URL 以获得相同的页面?例如,这可能很有用:

http://www.yoursite.com/index.php?search=MySearchTerm

这是一个 GET 请求,用户可以复制/与他人共享。但是联系表单会赌 POST 请求,因为在 URL 中添加所有联系方式没有任何意义。

【讨论】:

【参考方案4】:

通过这个你会有一个清晰的想法

礼貌:-维基答案.....

$_POST 和 $_GET 都是 PHP 变量,用于从 html 表单中提取输入。但是,不同之处在于 $_POST 对用户隐藏了提取的变量,而 $_GET 没有。因此,这两个变量在安全性方面存在重大差异。

那你为什么要使用 $_GET 呢?因为有些网站拥有为用户提供完整信息的大型数据库。例如,假设您在网上购物,您去购买 2 条裤子(商品 #125)。您被发送到的 URL 可能如下所示:

catalog.php?item=125&quantity=2

如您所见,通过 $_GET 获得的变量对用户是可见的。

POST 方法有可能发送大量数据(通常受服务器设置限制),除非它代表比较 GET 方法的好处,否则可以使用它。很多浏览器不能正确地为 HTTP POST 方法后显示的页面添加书签,因为提交的数据显示在地址栏中。 当您需要使用 GET 方法获取的查询字符串时(由于其限制无效),您将尝试对表单使用 POST 方法。如果您提交不应该在地址栏中显示的重要信息,您可以使用POST方法。

【讨论】:

谢谢。在在线购买网站中,由于通过 post 方法继续或无意点击购买或提交按钮,当前用户可能面临支付多笔金额的风险,这又如何呢?我们将如何防止这种情况发生? 顺便说一句,我不只是指 PHP。 @nsutgio 你不使用 javascript/警报框来确认选择吗?

以上是关于http POST和http GET之间的澄清[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

HTTP方法:GET和POST

HTTP两种请求方法:GET和POST基础了解

Http协议的post和get提交方式。

HTTP 方法:GET 对比 POST

GET和POST

两种最常用的 HTTP 方法:GET 和 POST的区别