我有一个通过安全表单进入的HTTPS帖子。不需要冗长的解释:我需要在同一个控制器中调用一个动作,该动作接受两个作为参数传递的标记。当我运行Fiddler时,我看到使用URL中的参数调用该方法。我的问题是:这会带来安全隐患吗?是否有更安全的方法在同一个控制器内重定向?
答案 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
或其他网址。
但是,你应该记住的事情是:
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,那么漏洞就会出现在那里。