问题标签 [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 回答
3865 浏览

asp.net-mvc - MVC3 AntiForgeryToken 在 Ajax 登录时中断

ASP.NET MVC 的AntiForgeryToken机制基于当前的HttpContext.User. 当您调用Html.AntiForgeryToken(). 基本上没问题(请参阅此处最后一段中的解释),但是当您通过Ajax 调用登录时会出现问题。

在我的代码中,当用户登录时,凭据在 Ajax 中作为 Json 对象发送(AntiForgeryToken隐藏字段值也在 Json 内部发送),服务器对用户进行身份验证,应用 FormsAuthentication.SetAuthCookie(),并返回一个 Json结果包含一些用户特定的数据。这样,我可以避免登录时刷新整页。

问题是现在对服务器的每个后续 Ajax 请求都失败了ValidateAntiForgeryTokenAttribute,因为它现在需要一个与防伪 cookie 不兼容的防伪令牌。

如何获取有效的防伪令牌以放入客户端的隐藏字段,以便登录后的每个 Json 请求都会成功?

我试图手动获取一个新的隐藏字段令牌(AntiForgery.GetHtml()在操作中使用,提取令牌字符串本身,将其返回到 Json 中的客户端并在 JavaScript 中手动将其放置在防伪隐藏字段中)但它不起作用 -服务器上的后续 Ajax 调用失败ValidateAntiForgeryTokenAttribute。事实上,每次调用AntiForgery.GetHtml()(本质上是Html.AntiForgeryToken()helper 所做的)都会产生一个不同的令牌,这会使前一个令牌无效。

我也尝试在这里HttpContext.User = new GenericPrincipal(new GenericIdentity(email), null);设置为详细,但它不起作用。

注意:由于我的具体情况, 此解决方案对我不起作用: Ajax登录会更改服务器上的用户身份,因此在登录之前生成的每个令牌都无效;该解决方案也不适用,因为它解决了不同的问题。

0 投票
1 回答
1728 浏览

asp.net-mvc - AntiForgeryToken 和 ValidateAntiForgeryToken 的意外行为

我已经开始在我的一些表单中使用 AntiForgeryToken 来防止跨站点请求伪造。但是我得到了一些奇怪的行为,只是想澄清这是一个错误还是我做错了什么。我正在使用Html.AntiForgeryToken()我的表单中的调用。[ValidateAntiForgeryToken]然后,我在表单发布到的操作方法中使用该属性。在这一点上,我没有使用盐。

我的理解是,它会Html.AntiForgeryToken()生成一个名为 的隐藏输入和一个名为__RequestVerificationToken的 cookie __RequestVerificationToken_Lw__,它们都应该包含相同的值。

然而,我遇到的行为是:

  1. 无论您获取页面多少次,cookie 始终具有相同的值
  2. 每次获取页面时隐藏的输入都有不同的值
  3. ValidateAntiForgeryToken 每次都进行验证,即使来自 CSRF 场景中的不同站点。
  4. 如果我更改了外部站点中隐藏输入的值,则令牌不会验证(预期的行为,但为什么当隐藏输入/cookie 值不同时它会验证?)

有人有什么想法吗?

0 投票
2 回答
1911 浏览

asp.net-mvc-3 - 没有表单身份验证的 AntiForgeryToken

我们有一个使用 MVC3 的网站和一个完全不依赖表单身份验证的自定义身份验证方法——至少据我所知。在 web.config 我们设置

而且我们从不在代码中的任何地方使用/设置 HttpContext.User。问题是在某些情况下使用 @Html.AntiForgeryToken() 时,用户会收到以下错误消息:

我们使用以下代码将所有防伪检查集中在 OnAuthorization 中:

那就是发生异常的地方。我们在 web.config 中定义了一个 machineKey,以防止在应用程序池回收时生成新的密钥。这并没有解决问题。

接下来我们认为可能是客户端的浏览器没有发送cookies。我们开始记录 cookie,并注意到在某些情况下会发送 RequestVerificationToken_Lw cookie,但在其他情况下则不会——即使其他 cookie,例如由 Google Analytics 制作的 cookie,也可以正常发送。可能是浏览器中的某些东西正在剥离一些 cookie 并留下其他的吗?

似乎防伪令牌取决于表单身份验证。是这样吗?在不以可靠方式使用表单身份验证时继续使用 AntiForgeryToken 的任何方式。请记住,我上面描述的方法适用于 90% 以上的情况,但我们无法确定为什么它对某些人不起作用。

想法?
谢谢!

0 投票
1 回答
1747 浏览

ajax - 如何在同一个 MVC3 页面上使用多个带有 AntiForgery 验证的 ajax 表单?

当我们在同一个 cshtml 页面上有多个可能的表单发布到控制器时,Antiforgery 验证不起作用。我们浏览了 MVC3 代码,发现问题出在这部分代码中:

我们拥有的 cshtml 是这样的:

你能帮我解决这个问题吗?我们发现,在移除其中一个防伪令牌后,一切似乎都按预期工作。

我们尝试为防伪设置机器密钥,但它也不起作用。

问候。

0 投票
2 回答
1183 浏览

asp.net-mvc - MVC Antiforgery 请求验证令牌出现在查询字符串中

我有一个带有以下代码的 MVC 3 视图:-

当我发布表单时,我看到 __RequestVerificationToken= 和查询字符串中的验证令牌的内容。

任何想法为什么会出现这种情况以及如何对其进行排序?

0 投票
5 回答
384 浏览

php - 阻止用户伪造表单的安全方法

如何防止用户在 PHP 或 jquery 端伪造表单,我正在使用 Jquery 的 ajax 功能来提交表单,这意味着技术人员可以更改一些变量,例如某些东西的值(不应该通过使用萤火虫或网络检查器等改变/是用户ID或类似的东西)。

那么如何通过安全且良好的方式防止用户更改这些变量或确保它们不可更改呢?

谢谢

0 投票
1 回答
139 浏览

.net - .NET Mvc3 防伪令牌

在 .Net MVC3 Web 应用程序中,我怎样才能获得AntiForgeryToken? 返回由隐藏字段包装的HtmlHelper.AntiForgeryToken()令牌,但我只想要令牌。有没有只检索值的选项?

这是一段 POST 到 url(无表单)的 javascript。

0 投票
3 回答
14315 浏览

c# - 所需的防伪令牌未提供或无效

我正在使用 MVC 3,从我所看到的一切都正确设置。

用户 Authenticates 提交带有 AntiForgery 令牌的表单,一切正常。

除非用户将要提交的表单保持打开状态并且在该时间内用户登录已过期。

当用户提交表单时,他们不再经过身份验证,他们应该被带回登录页面。(这确实发生过几次)

相反,异常“未提供所需的防伪令牌或无效。” 被抛出。我想它被抛出是因为加密的令牌包含一些无法验证的用户详细信息,因为用户不再经过身份验证。

异常是正确的,但不应该被抛出,因为页面应该跳回登录屏幕,因为真正的问题是用户离开打开的表单并且他的登录超时。

这个问题很难复制,因为它并不总是这样做。

我看到很多人似乎有这个问题,但没有解决方案即将到来。

这是 MVC 本身的问题吗?

机器密钥设置和东西都是正确的,所以这不是问题。

0 投票
3 回答
4447 浏览

c# - ASP.NET MVC 3 网站防伪令牌仅在 IE 上失败

在我的 MVC 3 项目中,我有一个使用 MVC 3 中内置的防伪逻辑的登录页面。

在 Firefox 和 Opera 上它工作得很好,但在 IE 上我得到了这个:

我真的很困惑为什么只有 IE 会出现这种情况,我检查了 cookie 设置,它们的设置与其他浏览器相同,所以我在这里迷路了。

当我使用防伪代码时,我同时使用了 SALT 和域检查(这无关紧要,但值得一提)。

这是查看代码:

ViewBag.AppDomain 是 web.config 中的一个值,用于在测试和生产使用期间轻松设置。

如果我从防伪标签中删除域和路径部分,它就可以正常工作。所以这两者之一一定是问题所在。

0 投票
3 回答
3624 浏览

asp.net-mvc-3 - 将 MVC3 AntiforgeryToken 与链接一起使用?

在我的 MVC3 站点上,我有一个包含多个链接的页面。这些链接都链接回我网站上的一条路线,具有不同的 ID 值,并且结构如下:

IE: www.mysite.com/links/33351/3

我想利用 MVC3 的 antiforgerytoken 机制,这样我就可以确保所有请求都www.mysite.com/links/33351/3来自链接索引页面。

我熟悉如何将令牌添加到表单,但是这些都是独立的链接。

我怎样才能做到这一点?