【问题标题】:Choosing between safe and unsafe HTTP Method when creating MVC action创建 MVC 操作时在安全和不安全的 HTTP 方法之间进行选择
【发布时间】:2014-01-09 19:31:29
【问题描述】:

在选择 HTTP GET 和 HTTP POST 作为 ASP.NET MVC 中控制器上允许的操作方法时,我通常会遵循这些建议。

当服务器端没有变化时,也就是我想检索资源,HTTP GET 是允许的。

当用户即将提交一些将被持久化的数据时,需要使用 HTTP POST。

现在灰色区域的问题来了:

如果用户想下载文件怎么办?

通常我会将其设置为 HTTP GET(由于安全原因,文件存储在数据库中),因为服务器上没有进行任何更改。

如果我想记录用户 Y 下载的文件 X 怎么办?

随着新日志的创建,现在服务器端发生了变化。这是将 HTTP 方法从 GET 更改为 POST 的充分理由吗?

【问题讨论】:

  • 下载前用户是否已经登录网站?
  • 是的,但实际上并没有太大的区别。
  • 下载文件应该是 GET

标签: asp.net asp.net-mvc http asp.net-mvc-4 http-post


【解决方案1】:

我找到了关于如何处理这个问题的确切解释:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

安全方法的定义:

9.1.1 安全方法

实施者应该意识到软件代表用户 他们在互联网上的互动,并且应该小心允许 用户了解他们可能采取的任何可能具有 对自己或他人有意想不到的意义。

特别是,已经确立了 GET 和 HEAD 方法不应该具有采取行动的意义 除了检索。这些方法应该被认为是“安全的”。 这允许用户代理表示其他方法,例如 POST、PUT 和删除,以一种特殊的方式,让用户知道 正在请求可能不安全的操作。

自然不能保证服务器不 由于执行 GET 请求而产生副作用;在 事实上,一些动态资源认为这是一个特性。重要的 这里的区别是用户没有请求副作用,所以 因此不能对他们负责。

下面强调了重要的部分,这解决了我的问题:

自然不能保证服务器不 由于执行 GET 请求而产生副作用;在 事实上,一些动态资源认为这是一个特性。重要的 这里的区别是用户没有请求副作用,所以 因此不能对他们负责。

因此,由于用户没有请求执行日志记录,因此它被认为是副作用,因此我可以继续将 GET 设置为文件下载的 HTTP 方法。

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 2010-12-12
    • 2012-06-05
    • 2011-06-13
    • 2012-01-22
    • 2014-11-03
    • 2014-03-25
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多