RedirectToAction是否会带来安全风险?

时间:2015-01-28 22:34:14

标签: asp.net-mvc security asp.net-mvc-4

我有一个通过安全表单进入的HTTPS帖子。不需要冗长的解释:我需要在同一个控制器中调用一个动作,该动作接受两个作为参数传递的标记。当我运行Fiddler时,我看到使用URL中的参数调用该方法。我的问题是:这会带来安全隐患吗?是否有更安全的方法在同一个控制器内重定向?

2 个答案:

答案 0 :(得分:1)

是的,它会带来安全风险,但只需验证您重定向到的网址与源目标位于同一个域内,就可以轻松减轻这种风险。

事实上,这是在OWASP的前10名。

A10 - Unvalidated Redirects and Forwards

编辑:

我刚刚意识到我错过了#34; ToAction"问题的一部分,所以没有..用RedirectToAction重定向到站点之外是不可能的,因此不用担心。但是,如果您使用直接用户输入来提供RedirectToAction(并且包括接受您在其他页面中生成的帖子数据),那么攻击者可能会重定向到您未预料到的方法。然而,这与用户只是尝试随机URL并点击一个,或者知道一个URL并手动转到它没有什么不同。您需要拥有授权才能阻止访问用户无权查看的网址。

答案 1 :(得分:1)

如果通过HTTPS访问原始操作,则RedirectToAction将使用相同的协议重定向到同一域上的相对URL。

因此,如果您的原始页面是

https://www.example.com/Foo/Bar

并使用一些路由参数重定向到FooBar操作:

https://www.example.com/Foo/FooBar/1/2/3

攻击者无法读取参数1/2/3或其他网址。

但是,你应该记住的事情是:

  • 默认情况下,浏览器(历史记录),服务器,公司代理服务器以及网络上其他设备默认记录URL参数。
  • 如果用户关注从您的网页到其他https网址的任何链接,则referer HTTP标头将包含您的网页地址,包括参数。现代浏览器不会通过referer链接发送http标题。
  • 如果您的网页上有任何其他https资源,这将导致浏览器发送带有请求的referer标头。

由于这些原因,如果您的参数(1/2/3)是私有的,那么您可能希望将POST此数据发送到目标网页,而不是使用RedirectToAction(这导致{ {1}})。

请注意,您应该验证当前用户是否可以访问GET引用的资源(例如,如果参数是订单ID,您应该检查由其身份验证cookie标识的用户是否允许他们使用看到引用的顺序)。如果参数本身是敏感的(例如社会安全号码),则保持1/2/3私密只是有益的。

请注意,OWASP Top 10漏洞“A10 - 未经验证的重定向和转发”不适用于此处,因为1/2/3只能重定向到其他操作。如果其他操作重定向到用户设置的URL,那么漏洞就会出现在那里。