C# MVC HttpGet和HttpPost

C# MVC HttpGet和HttpPost,c#,asp.net-mvc,C#,Asp.net Mvc,最近我参加了mvc培训。培训师说-出于安全考虑,我们必须使用HttpPost而不是HttpGet。始终使用HttpPost 有人能解释一下吗?当我们使用HttpGet时,安全问题是什么?当通过安全连接(https)传输数据时,post请求的主体是加密的,实际上是不可读的,您只能看到数据的地址,而不能看到数据本身。另一方面,Get没有主体,数据必须以查询字符串或路径参数的形式传输。虽然查询字符串确实也得到了加密,但由于服务器和浏览器上的请求日志记录,因此可以获得该数据 在post请求的安全连接(h

最近我参加了mvc培训。培训师说-出于安全考虑,我们必须使用HttpPost而不是HttpGet。始终使用HttpPost


有人能解释一下吗?当我们使用HttpGet时,安全问题是什么?

当通过安全连接(https)传输数据时,post请求的主体是加密的,实际上是不可读的,您只能看到数据的地址,而不能看到数据本身。另一方面,Get没有主体,数据必须以查询字符串或路径参数的形式传输。虽然查询字符串确实也得到了加密,但由于服务器和浏览器上的请求日志记录,因此可以获得该数据

在post请求的安全连接(https)主体上传输数据时是加密的,实际上是不可读的,您只能看到数据所在的地址,而不能看到数据本身。另一方面,Get没有主体,数据必须以查询字符串或路径参数的形式传输。虽然查询字符串确实也得到了加密,但由于服务器和浏览器上的请求日志记录,因此可以获得该数据

任何人都可以在公共论坛或stackoverflow上插入图像,并链接到您的网站。接下来发生的是:

  • 浏览器查看图像标记中的url
  • 浏览器在url中查找与域对应的Cookie
  • 浏览器通过用户的cookies向url发送请求
  • 您的服务器执行操作
  • 浏览器尝试将响应解析为图像,但失败
  • 浏览器渲染错误而不是图像

  • 但是,如果您将您的操作标记为仅Http Post,则此场景不适用于90%的站点。但是你也应该考虑,如果黑客可以在其他网站上创建一个表单,那么他仍然可以让浏览器执行请求。所以你需要。嗯,浏览器在防止跨站点请求方面做了很多工作,但在某些情况下仍然是可能的。

    任何人都可以在公共论坛或stackoverflow上插入图像并链接到您的网站。接下来发生的是:

  • 浏览器查看图像标记中的url
  • 浏览器在url中查找与域对应的Cookie
  • 浏览器通过用户的cookies向url发送请求
  • 您的服务器执行操作
  • 浏览器尝试将响应解析为图像,但失败
  • 浏览器渲染错误而不是图像

  • 但是,如果您将您的操作标记为仅Http Post,则此场景不适用于90%的站点。但是你也应该考虑,如果黑客可以在其他网站上创建一个表单,那么他仍然可以让浏览器执行请求。所以你需要。浏览器在防止跨站点请求方面做了很多工作,但在某些情况下仍然有可能做到这一点。

    使用GET for action的风险在于:这里!此外,您在离开页面后再次触发操作,然后按下浏览器的后退按钮。有关主题HttpGet的一些信息,请参阅本文。这一事实应仅用于从地址栏调用的URL。所有的按钮和链接点击都应该使用HttpPost调用。例如:“www.users.com/user/getinfo/4”获取id 4的数据。在这种情况下,用户只需向URL传递不同的id,就可以轻松获得其他用户的数据。我仍在试图弄清楚为什么这个问题被否决?这是一个关于GET和POST如何真正在引擎盖下工作的常见误解。来自WebForms的很多人都在处理所有事情,当他们切换到MVC时,就像被交给了Lambo的钥匙,他们不知所措。使用get进行操作的风险是:这里!此外,您在离开页面后再次触发操作,然后按下浏览器的后退按钮。有关主题HttpGet的一些信息,请参阅本文。这一事实应仅用于从地址栏调用的URL。所有的按钮和链接点击都应该使用HttpPost调用。例如:“www.users.com/user/getinfo/4”获取id 4的数据。在这种情况下,用户只需向URL传递不同的id,就可以轻松获得其他用户的数据。我仍在试图弄清楚为什么这个问题被否决?这是一个关于GET和POST如何真正在引擎盖下工作的常见误解。来自WebForms的很多人都在处理所有事情,当他们切换到MVC时,就像被交给了一个Lambo的钥匙,他们感到不知所措。