MVC5 Web应用程序脚手架-帐户/注销-为什么使用HTTP Post



我正试图了解MVC 5 Web应用程序模板,我注意到LogOff链接周围的安全性受到特别关注。

在脚手架模板中,_LoginPartial中的"LogOff"链接。cshtml视图位于HTML表单中,其中包含AntiForgeryToken,并被定义为对表单提交操作的JS调用,如下所示:

@if (Request.IsAuthenticated)
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
    @Html.AntiForgeryToken()
    <ul class="nav navbar-nav navbar-right">
        <li>
            @Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
        </li>
        <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
    </ul>
    }
}

在ActionController中使用相应的动作方法Account/LogOff,定义如下:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult LogOff()
        {
            AuthenticationManager.SignOut();
            return RedirectToAction("Index", "Home");
        }

我的问题是——这背后的原因是什么?为什么LogOff动作需要如此多的安全保护?为什么不把这个放到视图中呢,

@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
@Html.ActionLink("Log Off", "LogOff", "Account", routeValues: null, htmlAttributes: new { title = "LogOff" })

在控制器中:

 public ActionResult LogOff()
        {
            AuthenticationManager.SignOut();
            return RedirectToAction("Index", "Home");
        }

这会造成什么安全漏洞?

谢谢。

请参考此链接:登出:GET还是POST?

它将回答你为什么要在登出时使用Post的问题。

相关内容

  • 没有找到相关文章

最新更新