- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在登录页面上的防伪 token 存在特定问题。如果用户仅使用一个事件窗口登录,则一切正常,但是,如果用户在两个不同的窗口中打开登录页面并从窗口A登录(不会登录,则没有问题),然后从该窗口中的窗口B返回登录。用户将收到“未提供必需的防伪 token 或该 token 无效”的信息。
有没有其他办法可以从 View / Controller 操作中删除防伪 token ?我们希望拥有 token 来提高安全性!
这与这个问题非常相似,但是有人问了mvc2
MVC ValidateAntiForgeryToken multi-tabs problem
最佳答案
MVC3或MVC4中的此行为是按设计设计的,但是如上所述,它对用户非常不友好,但是在生产中,必须妥善解决此问题,并且应用程序需要处理这种奇怪的情况。解决此问题的方法是创建一个应用于登录帖子的过滤器,该筛选器将验证用户是否已登录并将用户带到正确的页面,否则他们将保留在登录页面上。
以下是过滤器属性的代码
/// <summary>
/// Handle Antiforgery token exception and redirect to customer area if the user is Authenticated
/// </summary>
public class RedirectOnError : HandleErrorAttribute
{
/// <summary>
/// Override the on exception method and check if the user is authenticated and redirect the user
/// to the customer service index otherwise continue with the base implamentation
/// </summary>
/// <param name="filterContext">Current Exception Context of the request</param>
public override void OnException(ExceptionContext filterContext)
{
if (filterContext.Exception is HttpAntiForgeryException && filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// Set response code back to normal
filterContext.HttpContext.Response.StatusCode = 200;
// Handle the exception
filterContext.ExceptionHandled = true;
UrlHelper urlH = new UrlHelper(filterContext.HttpContext.Request.RequestContext);
// Create a new request context
RequestContext rc = new RequestContext(filterContext.HttpContext, filterContext.RouteData);
// Create a new return url
string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(new { Controller = "CustomerArea", action = "Index" })).VirtualPath;
// Check if there is a request url
if (filterContext.HttpContext.Request.Params["ReturnUrl"] != null && urlH.IsLocalUrl(filterContext.HttpContext.Request.Params["ReturnUrl"]))
{
url = filterContext.HttpContext.Request.Params["ReturnUrl"];
}
// Redirect the user back to the customer service index page
filterContext.HttpContext.Response.Redirect(url, true);
}
else
{
// Continue to the base
base.OnException(filterContext);
}
}
}
[HttpPost]
**[RedirectOnError]**
[ValidateAntiForgeryToken]
public ActionResult LogOn(LogOnViewModel model, UserSessionState session, string returnUrl)
{
.....
}
关于asp.net-mvc - Mvc3 Antiforgery token 多标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881157/
背景 我有一个相对较新的 ASP.NET Core 2 站点。它只在一台服务器(Windows Server 2012 R2,IIS 8.5)上运行,我每隔几天在上传更新时才重启一次网站。大约每天一次
我正在尝试在我的 Web Api 中实现 Antifrogery token ,但出现以下错误: 名称“AntiForgery”在当前上下文中不存在。 这是我的代码: using System.Thr
我的想法是让docker容器在一个已经编译过的Aspnet core 1.1应用程序所在的文件夹中安装一个文件夹。 当我这样做时,文件丢失了。做到最好的方法是什么? 如何重现问题: 在OSX主机中,我
有什么办法可以防止 .AspNetCore.Antiforgery 在 Asp.Net Core 2 中创建 Cookie? 根据我的理解 services.addmvc 在内部调用 AddAntif
我是 ASP.NET MVC 的新手。我想知道在 ASP.NET MVC 中加密的 AntiForgeryToken 是否有一组唯一的有效字符。我需要在阅读时验证 key 。我在我的 web.conf
我正在将 asp.net core 2.0 网站部署到 IIS 10。 我已确保我的应用在 program.settings 文件中使用正确的 ISS 配置。 public class Program
我正在 Kubernetes 上的 .net core 3.0 上使用 Redis 数据库进行数据保护,但仍然出现以下错误。有任何想法吗? fail: Microsoft.AspNetCore.Ant
我们正在使用 objective-c 编写一个 iOS 移动应用程序,用于向我们的 ASP.NET MVC 服务器应用程序发布帖子。在 iPhone 上,HTTP 堆栈(和 cookie 等)似乎与
我在 yml 文件中有 4 个 docker 容器。 数据库容器 身份服务器容器(带有身份服务器的 asp.net 核心应用程序) Api Server(asp.net核心应用) 客户端(Angula
我们在登录页面上的防伪 token 存在特定问题。如果用户仅使用一个事件窗口登录,则一切正常,但是,如果用户在两个不同的窗口中打开登录页面并从窗口A登录(不会登录,则没有问题),然后从该窗口中的窗口B
我使用AntiForgeryToken来处理多个表单提交,代码如下 public override void OnActionExecuting(ActionExecutingContext f
在看到 AntiForgery.Validate() 方法错误(当表单 token 未验证时它应该这样做)并访问此站点后:http://msdn.microsoft.com/en-us/library
当我们在同一个 cshtml 页面上有多个可能的表单要发布到 Controller 时,防伪验证不起作用。我们检查了 MVC3 代码,发现问题出在这部分代码中: if (!String.Equals(
我有 Angular 5 应用程序和 .net core 2.0 Web api 应用程序作为应用程序服务托管在 azure 上。应用程序有两个网址,如下所示。 angularclient.azure
在从非浏览器客户端(例如 WinForm)调用时,处理具有 ValidateAntiForgeryTokenAttribute 属性的方法的防伪的最佳方法是什么? 据我所知,以下是防伪的工作原理: 一
我有一个用 ASP.net (v2.2) 和 Angular8 编写的应用程序。 C# 端(服务器端)只是一个向 Angular(客户端)应用程序公开功能的 Web API。 我的客户端应用程序使用
我正尝试在 this 之后授权云提供商在本地主机上,在 ConfigureServices 方法中,我的 Startup.cs 文件有 services.AddAntiforgery(options
使用由最新 (RC2) VS2015 ASP.NET Core 模板创建的开箱即用的 MVC 应用程序,文件 _LoginPartial.cshtml 在共享的 _Layout.cshtml 文件中呈
我在 webfarm 场景(带有多个 AppServer 的 ARR 前端)中运行 MVC 6 (vNext)。服务器关联已关闭。 当我在应用服务器之间从一个请求跳到另一个请求时出现错误 Crypto
我遇到了 MVC4 的问题 @Html.AntiForgeryToken() html 助手。在我的开发机器上,当我运行项目时,在检查 header (使用 Fiddler)时,返回的 token 名
我是一名优秀的程序员,十分优秀!