1

我正在创建一个主要基于 WebMatrix 2 提供的模板的应用程序。

一切都很好,尽管我在标题中创建“注销”链接时遇到了一些问题。

目前我有以下链接:

<a href="~/account/logout.cshtml">Sign Out</a>

反过来,它指向此页面:

@{
    WebSecurity.RequireAuthenticatedUser();

    if (IsPost) {
        // Verify the request was submitted by the user
        AntiForgery.Validate();

        // Log out of the current user context
        WebSecurity.Logout();

        // Redirect back to the return URL or homepage
        var returnUrl = Request.QueryString["ReturnUrl"];
        Context.RedirectLocal(returnUrl);
    } else {
        Response.Redirect("~/");
    }
}

但是当我点击这个链接时,它什么也没做,我仍然登录。我哪里出错了?

4

1 回答 1

2

问题是,默认情况下,注销链接是(并且应该是)经过验证的 POST 请求,这是为了防止通过将用户重定向到注销页面来将用户注销的 XSS 攻击。

感谢这段代码:

if (IsPost) {
    // Verify the request was submitted by the user
    AntiForgery.Validate();

..您将需要创建一个用于注销的表单,如下所示:

<form method="post" action="~/account/logout.cshtml">
    @AntiForgery.GetHtml()
    <input type="submit" value="Logout" />
</form>

当然,您可以使用 JavaScript 让普通链接提交该表单,从而使它看起来像最终用户的普通链接,只有他们受到保护!

于 2013-02-21T10:44:04.787 回答