【发布时间】:2013-02-08 23:23:51
【问题描述】:
当用户在注销后点击返回按钮时,他们会得到文档过期。但是,当用户单击此消息时
单击重试以从网站重新请求文档,
在浏览器中,他们可以再次访问经过身份验证的页面。
【问题讨论】:
标签: c# asp.net-mvc
当用户在注销后点击返回按钮时,他们会得到文档过期。但是,当用户单击此消息时
单击重试以从网站重新请求文档,
在浏览器中,他们可以再次访问经过身份验证的页面。
【问题讨论】:
标签: c# asp.net-mvc
这是因为页面被缓存了。对于所有安全请求,您需要手动终止缓存。你可以这样做:
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();
}
如果您的大部分网站都是安全的,您还可以注释整个控制器或全局注册。
【讨论】:
对于 GET 请求,您希望他们仍能在“返回”上看到经过身份验证的页面,但无法与之交互(假设您使用 POST 进行操作)。
由于您谈论的是 POST 请求(因为它给您的是过期消息),您可能会在控制器/操作中缺少 [Authorize] 属性,这将允许任何未经身份验证的用户访问它,你检查过这个吗?
【讨论】: