在创建MVC操作时在安全和不安全的HTTP方法之间进行选择

时间:2014-01-09 19:31:29

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

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

如果服务器端没有变化,我想要检索资源,则允许HTTP GET。

当用户即将提交一些将被保留的数据时,需要HTTP POST。

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

  

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

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

  

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

现在,在创建新日志时,服务器端会发生更改。这是否足以将HTTP方法从GET更改为POST?

1 个答案:

答案 0 :(得分:0)

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

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

安全方法的定义:

  

9.1.1安全方法

     

实施者应该知道该软件代表用户   他们在互联网上的互动,应该小心允许   用户要知道他们可能采取的任何行动   对自己或他人意想不到的重要性。

     

特别是,已经建立了GET和GET的惯例   HEAD方法不应该具有采取行动的意义   除了检索。这些方法应该被认为是“安全的”。   这允许用户代理表示其他方法,例如POST,PUT   和DELETE,以一种特殊的方式,使用户了解   事实上,正在要求采取可能不安全的行动。

     

当然,无法确保服务器不能   由于执行GET请求而产生副作用;在   事实上,一些动态资源考虑了一个功能。重要的   区别在于用户没有请求副作用,所以   因此不能对他们负责。

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

  

当然,无法确保服务器不能   由于执行GET请求而产生副作用;在   事实上,一些动态资源考虑了一个功能。重要的   区别在于用户没有请求副作用,所以   因此不能对他们负责。

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