Architecture 在处理传入数据时,有什么真正的理由区分POST和GET吗?

Architecture 在处理传入数据时,有什么真正的理由区分POST和GET吗?,architecture,post,get,Architecture,Post,Get,最近,我一直在使用一个包装器PHP类,它获取GET和POST数据,并允许我使用单个getter函数访问它。在开发了多年的web应用程序之后,我从来没有一个好的理由去关心传入的var是来自POST还是GET。不仅如此,我还厌倦了检查两个数组中的单个变量 今天我注意到codeigniter有一个用于POST数据的getter函数和一个用于GET的getter函数。这有什么意义吗?这里有没有人有理由关心他的数据来自哪里 有几点需要澄清:我不是在问POST和GET之间的区别,也不是在问我应该使用哪一个来

最近,我一直在使用一个包装器PHP类,它获取GET和POST数据,并允许我使用单个getter函数访问它。在开发了多年的web应用程序之后,我从来没有一个好的理由去关心传入的var是来自POST还是GET。不仅如此,我还厌倦了检查两个数组中的单个变量

今天我注意到codeigniter有一个用于POST数据的getter函数和一个用于GET的getter函数。这有什么意义吗?这里有没有人有理由关心他的数据来自哪里


有几点需要澄清:我不是在问POST和GET之间的区别,也不是在问我应该使用哪一个来向页面发送数据。我在问我是否应该关心数据是通过GET还是POST到达我的页面。

您可以关心数据来自表单(POST)还是通过URL参数(GET)提交的区别。例如,出于安全原因,如果您希望用户填写表单,则不希望接受URL数据


记录在案:不需要检查这两个数组,在PHP中,数组$u请求包含这两个数组(加上COOKIE)。

这是一个语义问题-如果接口(如REST)需要更高级别的语义,那么这就是关心HTTP“动词”的一个很好的理由。对于简单的web表单,您可能不关心。但是,当安全性受到威胁时,你可能会很在意它的区别:如果某人在代码中输入了一个正常的代码>隐藏< /代码>输入,得到变量,你就好像它来自一个代码> POST <代码>,它是一个潜在的攻击向量。
在RESTful API中,您肯定会关心它们之间的区别:
POST
的意思与
GET
完全不同。在本例中,除了它被忽略的近亲
PUT
DELETE
之外,最简单的答案是知道如何接收数据对于安全性很重要

通常,您可以在类型之间进行交换,但以登录为例,如果允许通过GET处理登录,您将是一个傻瓜。我希望查看您的服务器日志,然后能够在请求日志中看到GET变量。。解锁所有用户密码

这篇文章还需要更多的资源,这有很多原因,所以你不想只强制发布请求。通过你的网站进行导航。如果某人通过发送POST命令导航,他将如何为页面添加书签


通常,你只需要慢慢地知道哪一个最适合你

GET请求将所有数据公开到日志文件(您的和您之间的代理)、引用者以及查看您浏览器的人可见的位置

通过GET的数据长度有限


如果您关心安全性:如果您知道表单方法是POST,为什么要接受表单通过GET发送的数据?

这是您的项目政治问题。两者都有各自的位置

如果您感到开放和友好,请使用
$\u REQUEST
。如果你觉得自己是法西斯分子,只允许你所期望的。如果您觉得有黑客行为,可以同时使用和differentive,比如允许保留半持久配置,方法是在GET中对其进行编码,并鼓励将页面添加到书签中,同时用严格易变的内容填充帖子


您可能真的真的想禁止GET的一个原因是密码字段之类的。您不希望您的用户(不知不觉地)将其敏感数据存储在浏览器历史记录中,因此不要通过允许GET来鼓励他们这样做。当然,您可以从普通的
中“获取”,因此,如果您导出任何API供“任何人使用”,请提供单独获取或两者都提供。

HTTP标准为获取/发布操作定义了不同的语义(第9.1.1节)


特别是,您可以使用来自get请求的数据进行信息检索,但不应该做任何涉及状态更改的事情。其中一个原因是,用户代理可能会在用户未实际单击链接的情况下预取页面(并执行get请求)。(我同意这在网络浏览器中并不常见,但我听说过邮件客户端会这样做)

安全性的观点站不住脚。通过浏览器插件更改方法非常简单,这使得编写代码来检查它是浪费时间。实际上,你不会费心检查这个。这就像把胶带贴在锁上,防止人们捡拾。不:如果方法改变,这是一个明确的信号,有人偷看和戳。web应用程序防火墙则有机会将您锁定。@initall:如果您对输入进行了清理,并且已经在防范网络钓鱼、SQL注入和XSS,那么您真的在乎有人偷看和刺探吗?我宁愿把我的钱花在一个安全的架构上,也不愿花在管理一个防火墙上,这样可以在需要帖子的时候检测到GET,特别是因为一个能够造成破坏的黑客在制作一篇帖子时不会遇到任何问题,如果这正是你所期望的。@Seth:我完全同意;但在我的安全概念中,peek&poke的检测也很重要,而且只是为了以后分析出什么地方出了问题。web防火墙是概念的一部分,而不是唯一可以依赖的部分。如果你把时间花在你提到的所有话题上,那么GET和POST之间的区别是非常便宜的。请让我注意:网络防火墙可以在发生任何事情之前警告您,并使您更加了解smth。一切都在进行中。@initall:很公平。如果你正在开发一款安全性是关键任务的应用程序,那么我可以看出区分POST和GET(并记录下来供将来分析)是多么重要。谢谢