问题标签 [antiforgerytoken]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1186 浏览

asp.net-mvc - Asp.Net 防伪

我有一个问题,我最近在我的所有表单中都放入了防伪令牌,并在我的控制器中放入了ValidateAntiForgeryToken属性。

但是我的用户经常填写表格,然后用浏览器按钮返回,纠正他们的一个错误,他们得到无效的防伪令牌。

我可以理解为什么会发生这种情况(我们将返回并使用不再有效的防伪令牌),但是有什么方法可以避免这种行为吗?喜欢强制重新加载此页面?

0 投票
2 回答
1091 浏览

javascript - 如何在启用 AntiForgeryToken 的情况下允许跨站点请求

我们都知道如何使用 AntiForgeryToken 来避免跨站请求伪造,它已经足够有效了。

我有一个不同的案例(但我认为这很常见),我有两个 asp.net mvc Web 服务器,分别称为 A 和 B。

出于某种原因,鉴于 B 中请求的操作已打开[ValidateAntiForgeryToken]属性,我想从网页 A 向 Web 服务器 B 发出发布请求。如何使它成为可能?

我看到 Html.AntiForgery 具有域和虚拟路径的潜力:

试过这个,但没有运气。任何人都知道如何解决这个问题?

0 投票
5 回答
64075 浏览

asp.net-mvc - Web API 和 ValidateAntiForgeryToken

我们有一些现有的 MVC Web 服务,它们在网页中被称为 AJAX 样式。这些服务使用 ValidateAntiForgeryToken 属性来帮助防止请求伪造。

我们正在寻求将这些服务迁移到 Web API,但似乎没有等效的防伪功能。

我错过了什么吗?是否有不同的方法来解决使用 Web API 的请求伪造?

0 投票
2 回答
713 浏览

c# - MVC3 AntiForgeryToken相关问题,深入框架

我在 .Net 4 和 IIS6(Win2003 服务器)上运行 MVC3 Web 应用程序。我们可以间歇性地捕获以下错误消息:

在视图中我们有代码

接收动作方法看起来像

我认为编码应该是正确的。有没有人经历过类似的事情?

0 投票
1 回答
6644 浏览

security - AntiForgeryToken 是如何工作的?

我正在将安全性应用于我的 .net 3.5 mvc2 Web 应用程序。我的网站不包含任何用户身份验证,并且在 .js 文件中包含许多 ajax 调用

在我写的 .aspx 文件中

在我写的 .js 文件函数中

在我的控制器中我写了

这对我来说很好,但我有 2 个问题
Q1。这是正确的方法吗?如果我看到页面源代码,我发现了这段代码

但是当我创建外部 html 文件并复制 __RequestVerificationToken 的值并传入 ajax 调用时,我收到此错误
A required anti-forgery token is not provided 或无效。 然后
是 Q2。运行时如何知道此页面正在提供复制的 __RequestVerificationToken?

0 投票
5 回答
21569 浏览

asp.net-mvc-4 - 使用 MVC 4 RC 为 Web API 实现 ValidatingAntiForgeryToken 属性的问题

我正在发出基于 JSON 的 AJAX 请求,对于 MVC 控制器,我非常感谢 Phil Haack 的用 AJAX 防止 CSRF以及 Johan Driessen为 MVC 4 RC 更新的 Anti-XSRF。但是,当我将以 API 为中心的控制器转换为 Web API 时,我遇到了两种方法之间的功能明显不同并且我无法转换 CSRF 代码的问题。

ScottS最近提出了一个类似的问题,由 Darin Dimitrov回答。Darin 的解决方案包括实现一个调用 AntiForgery.Validate 的授权过滤器。不幸的是,这段代码对我不起作用(见下一段)而且——老实说——对我来说太先进了。

据我了解,Phil 的解决方案在没有表单元素的情况下发出 JSON 请求时克服了 MVC AntiForgery 的问题;表单元素由 AntiForgery.Validate 方法假定/预期。我相信这可能就是我对达林的解决方案也有问题的原因。我收到一个 HttpAntiForgeryException “所需的防伪表单字段 '__RequestVerificationToken' 不存在”。我确定令牌正在被发布(尽管根据 Phil Haack 的解决方案在标题中)。这是客户通话的快照:

我尝试通过将 Johan 的解决方案与 Darin 的解决方案混合在一起来进行破解,并且能够让事情正常运行,但我正在引入 HttpContext.Current,不确定这是否合适/安全以及为什么我不能使用提供的 HttpActionContext。

这是我不雅的混搭。变化是 try 块中的 2 行:

我的问题是:

  • 我认为达​​林的解决方案假设存在表单元素是否正确?
  • 将 Darin 的 Web API 过滤器与 Johan 的 MVC 4 RC 代码混搭的优雅方法是什么?

提前致谢!

0 投票
2 回答
4460 浏览

asp.net-mvc - 我将如何编写一个 ActionFilter 来确保每个 Post 操作都使用 AntiForgeryTokens?

我想AntiForgeryTokens在每个 HttpPost 操作上使用一个 ActionFilter,该控制器位于一个名为ControllerBase该控制器的控制器中,每个其他控制器都继承自该控制器。

我想通过创建一个继承自它的 ActionFilter 来做到这一点,ValidateAntiForgeryToken它接受一个参数来告诉它要将自身应用于哪些 HTTP 动词。然后我想应用该过滤器 ControllerBase以确保AntiForgeryToken检查整个站点上的每个 POST 操作。

我正在考虑使用这个解决方案,但是

  • AuthorizationContext Constructor (ControllerContext)是一个过时的构造函数,我不确定如何使用推荐的AuthorizationContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor).

  • 默认情况下,它似乎没有使用 AntiForgeryToken,因为我收到以下错误:A required anti-forgery token was not supplied or was invalid在每次发布操作之后。

[HttpPost]我应该如何重写我的 ActionFilter 以满足当前的非过时标准并在每个动词上正确使用防伪标记?

我自己是否必须在每种形式中都包含防伪令牌(我想我会这样做)?(而不是自动生成 - 不要笑,我很好奇) 更新:正如评论中指出的那样;是的,这必须对每个表格进行。

这是我的 ControllerBase 中的代码供参考:

0 投票
1 回答
472 浏览

c# - Jquery Post & ASP.NET MVC Anti-ForgeryToken 验证

在我的控制器中,

在我看来,我这样做是为了发布,我能够使用 HTTP Get 检索 getJSON 的数据。问题是,当用户在名称中添加一个空格时,它不会验证并给出 404。所以我认为我可以使用 post 方法执行此操作,但似乎我无法发送我的登录名,因为我是通过序列化在数据中发送 Antiforgery 令牌...

有人可以帮忙吗?我将感激不尽。

0 投票
1 回答
9929 浏览

asp.net-mvc - 是否可以/正确在一页中以 2 种不同形式使用多个 @Html.AntiForgeryToken()?

我一直面临着严重的问题@Html.AntiForgeryToken()。我有一个注册控制器,它有一个创建视图来创建/注册新成员。出于这个原因,我@Html.AntiForgeryToken()在我的主要提交表单中使用了 a 而没有使用任何 SALT。现在我想验证用户名是否已经存在于我的用户名文本框的模糊事件的数据库中。对于这个验证,我编写了一个名为“Validation”的新控制器,并编写了一个带有常量验证 SALT 的方法:

方法工作正常。我检查了没有的 HTTP Get 注释[ValidateAntiForgeryToken],它给了我预期的结果。

我用谷歌搜索并检查了许多给定的解决方案,但这些都不起作用。对于我的验证控制器,我在同一页面中使用了另一个表单,并在防伪令牌中使用了 SALT。

示例:主提交表单的第一个防伪令牌:

@using (Html.BeginForm("Create", "Register")) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) ... }

第二个防伪令牌:

在javascript中我使用了这个

在我的萤火虫中,我得到了这个:

已通过,但在 cookie 部分中,我得到的 cookie 与传递的 cookie 不同:实际 Cookie:

我认为这是因为我在一页中使用了 2 个防伪令牌。但在我看来,我应该使用 2,因为第一个是为提交生成而下一个是需要验证验证。但是,这是我的猜测,我认为我错了,因此我需要你们的帮助。

谁能解释一下我应该使用两个防伪还是一个?

谢谢大家....

0 投票
1 回答
14406 浏览

asp.net-mvc - ASP.NET MVC - ValidateAntiForgeryToken 过期

在网页中,我们提供了一个超链接 (GET),用户可以单击该超链接进行身份验证:

这映射到以下返回视图的控制器方法:

此视图包含用户提供其凭据的表单;表单包含所需的 AntiForgeryToken。

当用户提交表单时,会调用以下 Controller 方法:

这工作得很好,大多数时候......

但是,如果用户让他们的浏览器在“相当长的”时间内保持打开状态,然后快速连续执行以下步骤:

  1. 单击超链接 (GET) 以加载登录表单
  2. 填写表格并提交

他们收到一个异常通知,通知他们 Anti-Forgery 令牌未提供或无效。

我不明白为什么会这样:视图(包含表单)是在浏览器休眠后创建的,因此防伪令牌应该都是“新鲜的”。但是,这种设计显然有问题,但我不确定如何最好地纠正它。

如果您有任何建议,请提前致谢。

格里夫