【问题标题】:post vs. put when posting a form发布表单时发布与放置
【发布时间】:2011-05-06 06:44:35
【问题描述】:

在评估表单是否已提交时,我会检查该方法是 post,而不是 get。有人告诉我这是一个很好的方式来知道表单是通过单击提交按钮提交的,而不仅仅是由在 url 中传递数据的脚本提交的。

“put”方法怎么样。它似乎与“post”非常相似。能或多或少地代替“post”而不损失“post”所提供的好处吗?

【问题讨论】:

  • Errmm... 以下是不正确的:“有人告诉我这是一个很好的方法,可以知道表单是通过单击提交按钮提交的,而不仅仅是由脚本提交的在 url 中传递数据。”请参阅 Wikipedia 上的 CSRF:“使用 HTTP 指定的 GET 和 POST 用法,其中 GET 请求永远不会产生永久影响,这是一种很好的做法,但不足以阻止 CSRF。攻击者可以编写 JavaScript 或 ActionScript 以不可见的方式提交 POST 表单到目标域。”
  • @Pekka,我现在不太关心浏览器的兼容性。我更关心之后的舞台。例如,如果它受支持并且浏览器可以检测到它,那么在安全方面,Web 应用程序本身会发生什么。看跌期权是否比帖子弱,或者它们或多或少相同?
  • @thejh,好的,你把我带到了那里。假设表单有一个“csrf”令牌并以这种方式受到保护,那么你会使用 get 吗?我想不是。你仍然会使用一个帖子。不知道为什么,但每个人都同意表单应该使用 post 方法提交,而不是 get。
  • PUT 是上传文件的旧方法,因为 GET 是获取数据的旧方法。这是在 HTTP 中替换资源的标准方法。

标签: php security forms post httpverbs


【解决方案1】:

没有。

HTML only supports post and get as form methods,尽管 HTTP 有其他的。

即使在 HTML 表单的上下文之外,答案仍然是否定的,因为 PUT 和 POST 非常不同。 POST 是一个通用的“这里有一些数据,用它做点什么”的方法,而 PUT 的意思是“用这个数据替换这个 URI 上的资源”。

【讨论】:

    【解决方案2】:

    如果您出于安全原因这样做,GETPOST 无关紧要。阅读有关 XSRF 预防的维基百科文章:http://en.wikipedia.org/wiki/Cross-site_request_forgery#Prevention

    【讨论】:

    • 实际上部分是出于安全原因,但我想知道 post 和 put 之间的区别(不是 get 和 post)。我想验证 post 和 put 是否或多或少相同。我给你写了回复你原来的评论。
    【解决方案3】:

    在安全性中放置和发布没有区别... 但是某些服务不支持 put

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      相关资源
      最近更新 更多