【问题标题】:Back button takes you back to authenticated page after logout退出按钮后,您将返回经过身份验证的页面
【发布时间】:2013-02-08 23:23:51
【问题描述】:

当用户在注销后点击返回按钮时,他们会得到文档过期。但是,当用户单击此消息时

单击重试以从网站重新请求文档,

在浏览器中,他们可以再次访问经过身份验证的页面。

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

这是因为页面被缓存了。对于所有安全请求,您需要手动终止缓存。你可以这样做:

public class SecurePageAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();
    }
}

然后你可以像这样在你的控制器中使用它:

[SecurePage]
public ActionResult Index() {
    return View();
}

如果您的大部分网站都是安全的,您还可以注释整个控制器或全局注册。

【讨论】:

    【解决方案2】:

    对于 GET 请求,您希望他们仍能在“返回”上看到经过身份验证的页面,但无法与之交互(假设您使用 POST 进行操作)。

    由于您谈论的是 POST 请求(因为它给您的是过期消息),您可能会在控制器/操作中缺少 [Authorize] 属性,这将允许任何未经身份验证的用户访问它,你检查过这个吗?

    【讨论】:

    • 我正在使用帖子。当用户注销时,我看到“文档已过期”,这在某种程度上是理想的结果。当您单击 FF 中的“重试”按钮时,它将在控制器中重新发送这些值(我可以在调试模式下看到),因此用户再次进行身份验证。即使用户再次点击 TRY,它也不应该路由到经过身份验证的页面。
    猜你喜欢
    • 2023-04-03
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多