Web applications 有什么好的理由让我关心参数是否通过GET或POST传递?

Web applications 有什么好的理由让我关心参数是否通过GET或POST传递?,web-applications,Web Applications,在我的框架的设计过程中,我考虑将POST和获取参数合并到一个$parameters变量中 开发人员的优势:该框架过滤所有参数值以保护agains XSS攻击(即插入错误javascript代码以将访问者重定向到垃圾邮件站点)和其他有用的验证/过滤 但和往常一样:将POST和GET分开有什么真正的好处吗?尽管它们只是因为来源不同而有所不同 我的意思是:这有关系吗?当POST参数与GET参数具有相同的名称,并且两者都被真正使用时,这在任何时候都是“好的设计”吗?在我看来,这很难看,但也许有人能很好地

在我的框架的设计过程中,我考虑将POST和获取参数合并到一个$parameters变量中

开发人员的优势:该框架过滤所有参数值以保护agains XSS攻击(即插入错误javascript代码以将访问者重定向到垃圾邮件站点)和其他有用的验证/过滤

但和往常一样:将POST和GET分开有什么真正的好处吗?尽管它们只是因为来源不同而有所不同

我的意思是:这有关系吗?当POST参数与GET参数具有相同的名称,并且两者都被真正使用时,这在任何时候都是“好的设计”吗?在我看来,这很难看,但也许有人能很好地解释为什么我不应该尝试合并帖子和获取


不管怎样,我都会考虑把职位放在首位。我希望得到诚实的答案:-)

POST
GET
请求有不同的语义。有关简要说明,请访问。基本上是一个
GET
请求

不应用于导致副作用的操作,例如在web应用程序中使用它进行操作。其中一个原因是GET可能被机器人或爬虫随意使用,这不需要考虑请求引起的副作用。 请注意,这不是由HTTP协议强制执行的,这是应用程序必须确保的。因此,应该在框架中分离不同的HTTP谓词


例如,如果一个
GET
请求不只是返回具有上述限制的资源,可能会发生什么:。

我相信流行的RubyonRails框架将它们组合成一个
params
变量(技术上是一个方法…)但也允许您通过其他方式访问原始GET或POST参数

在我的代码中,我一直将它们结合在一起,还没有遇到任何问题。

理想情况下*,有(或者可以有,学究式的)副作用,但没有。因此,第三方可以跟踪GET链接,而不必担心删除内容。或者任何在系统中经过修改的东西


在某些情况下,GET的响应也可以安全地缓存,而POST永远不应该缓存

我不会将两者合并,仅仅因为你失去了这些区别


*好吧,很多人把这搞砸了,所以你不能依赖这种行为;但是为什么会导致这个问题呢?

在某些情况下,接受GET而不是post会使你更容易受到CSRF攻击。然而,这不是一条硬性规定,即使在接受帖子时,你也应该采取措施防止CSRF。

来自:

9.1.1安全方法

实现者应该意识到 软件代表用户在他们的 互联网上的互动,以及 应注意允许用户 注意他们可能采取的任何行动 采取可能发生意外的行动 对自己或他人的意义

特别是,该公约得到了批准 确定了得到和头 方法不应具有 采取其他行动的意义 而不是检索。这些方法应该 被认为是“安全的”。这允许用户 代表其他方法的代理, 例如,在 特殊的方式,使用户 意识到一个事实 正在请求不安全的操作

当然,这是不可能的 请确保服务器不运行 由于以下原因产生副作用: 执行GET请求;事实上 一些动态资源认为 特色。重要区别 这里是用户没有请求的 副作用,所以不能 要对他们负责。 9.1.2幂等方法

方法也可以具有 “幂等性”(除了 错误或过期问题)的 N>0的副作用相同 请求与单个请求相同 要求方法得到,头,放 并删除共享此属性。也, 方法选项和跟踪应该 没有副作用,也没有副作用 本质上幂等的

然而,有可能 几个请求的顺序是非连续的- 幂等的,即使所有的方法 按该顺序执行的是 幂等元。(序列是幂等的。) 如果一次执行整个 序列总是产生一个 不会因重新执行而改变 该序列的全部或部分 例如,序列是非幂等的 如果其结果取决于 以后在同一版本中进行修改 顺序

从来没有副作用的序列 是幂等的,根据定义(提供 没有并发操作 在同一组数据上执行 资源)


因此,GET基本上是幂等的(如果你重新提交表单,你会得到与一次相同的结果——例如,你不会因此从亚马逊收到两次订单。)POST的目的是在其行为方式上更加自由。

GET查询可以被书签、链接并保存在浏览器的历史记录中。这可以是好的也可以是坏的;例如,您的用户不希望其他人看到他们访问了example.com/?password=jigglypuff,也不希望有人被骗点击example.com/?changepasswordto=irh4x0r

如果您使用POST,则无法直接将操作添加到书签中。假设您有一个创建新项的方法:

YourPage.aspx?action=create¶m=abcde

如果我碰巧为这个品牌添加了书签(这可能是偶然的,因为它显示了另一个我想添加书签的页面),每次打开书签时,我都会尝试创建一个新项目

当搜索引擎发挥作用时,这一点尤其令人担忧——如果你将其与糟糕的身份验证结合起来,那么在t