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

asp.net-mvc - ASP.MVC 防伪令牌和加密错误

我正在使用 ELMAH 来处理我的 MVC 站点中的错误,并且在过去的几周中我注意到我收到了一些 CryptographicExceptions 抛出。消息是:

System.Security.Cryptography.CryptographicException:填充无效且无法删除。

System.Web.Mvc.HttpAntiForgeryException:未提供所需的防伪令牌或无效。---> System.Web.HttpException:视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。--->

该应用程序未在集群中运行,我似乎无法重现这些错误。它们看起来像有效请求——不是手工制作的帖子——并且确实包含 __RequestVerificationToken cookie。我在页面上的表单(我的登录表单)内确实有所需的 HTML 帮助程序。

我还没有收到任何用户投诉,所以我假设它最终适用于任何试图登录的人,但我想知道为什么会发生这种情况。

任何其他看到这种行为或对如何诊断异常有任何想法的人——就像我说的那样,我不能让它失败。在 FF 中删除 cookie 会出现不同的错误。修改 cookie(更改或删除内容)也会导致不同的错误,修改页面上隐藏令牌输入的内容也是如此。

0 投票
8 回答
4341 浏览

c# - 通过依赖注入创建 AntiForgeryToken

我正在努力提高我公司网站的安全性,并希望创建一个令牌来防止可以轻松维护的伪造尝试,这就是我想出的。

在我的 MasterPage 的基类中,我有一个 HiddenField,其中包含名为:ReferenceToken

我有 StructureMap 句柄将令牌存储在 Session 中,因此它在每个用户会话中都保持不变,所有这些都是 AntiForgery 方案的有效实现吗?

编辑:我的问题似乎有些混乱,是的,我了解 ASP.NET MVC 有一个内置的 AntiForgeryToken 方案,这个问题明确地是关于如何为WebForms重新创建它以防止使用 CSRF 攻击(Cross Site Request Forgery )。我理解这绝不会消除对用户权限的适当授权的需要。

我将提出@Neal 和@solairaja 发布的链接:使用 ASP.NET MVC 的 AntiForgeryToken() 帮助程序防止跨站点请求伪造 (CSRF)。本文解释了更多 CSRF 攻击是什么以及 MVC 如何阻止它,但是他们的解决方案不适用于 Web 表单,这就是我开始实施自己的解决方案的原因。

在看到@Neal 的回复后,我认为这很可能是公认的答案,因为我没有意识到我可以从 MVC 工具中获取实际源代码,这很可能会取代 guid 创建。但如果其他人有一些有价值的信息要添加,我会留下这个问题。

0 投票
1 回答
940 浏览

asp.net - ASP.NET MVC AntiForgeryToken 的验证问题

所以我有一个有趣的问题......我需要让我的 web 应用程序通过 IBM 应用程序扫描设备,然后才能将我的更改推送到生产环境。我的最新更改包括 ASP.NET MVC 中的 AntiForgeryToken。我测试过的每个浏览器都可以正常工作,没有问题。但是,当设备尝试提交表单时,会收到验证错误。查看验证令牌,该设备正在对帖子上的表单值进行 html 编码,因此字符串不匹配......这就是它们的样子:

cmiuJRHizXLPvlu9zHKmTwdJiHvq+n87CSJZkixkf/BLHayCPVITJhRCsWWirPWg - 从 cookie 中提取 cmiuJRHizXLPvlu9zHKmTwdJiHvq%2Bn87CSJZkixkf%2FBLHayCPVITJhRCsWWirPWg - 表单值

所以它正在将 + 转换为 %2B 和 / 转换为 %2F ...以前有人见过吗?这是客户端浏览器的问题吗?是否有 AntiForgeryToken 生成一个没有特殊字符的字符串,以便我可以通过此扫描获取我的应用程序?谢谢!

0 投票
1 回答
539 浏览

asp.net-mvc - 创建针对 html 安全漏洞的测试用例

在 ASP.NET MVC 以及测试用例项目中,

有人如何创建测试用例来测试控制器方法上的现有安全漏洞?

例如,如何为需要防伪令牌的调用创建测试用例?还是 XSS?

0 投票
1 回答
3726 浏览

asp.net-mvc - ValidateAntiForgeryToken 使用 jQuery ajax 表单提交失败

我有一个 HTML 表单,我在其中动态添加一个文本字段并通过 jQuery 对该表单执行 POST 请求到 ASP.NET MVC 控制器。

如果我在控制器操作上调用没有 ValidateAntiForgeryToken 属性的 POST 请求,它工作正常。但是,当我将 ValidateAntiForgeryToken 属性添加到操作时,我得到以下异常:

“所需的防伪令牌未提供或无效。”

有没有人知道为什么会这样?

需要注意的一点是,cookie 中的令牌 id 似乎与表单中呈现的令牌完​​全不同。为什么这些可能不同?

那个行动:

形式(呈现):

渲染防伪令牌的原始视图:

0 投票
2 回答
4605 浏览

asp.net-mvc - 响应中不存在 RequestVerificationToken cookie

我的 ASP.NET MVC 应用程序通过使用 ValidateAntiForgeryToken 属性并调用 Html.AntiForgeryToken 以使用令牌值写入隐藏的输入元素并将令牌放入 cookie 来防止 CSRF 攻击。

我的异常日志报告了 HttpAntiForgeryException 的出现,它们看起来像是由有效请求触发的(引荐来源网址看起来正确)。导致异常的 Response 在 Form 字段中还包含 __RequestValidationToken 以及令牌值。但是,请求中缺少必要的 cookie,导致验证失败并引发异常。

我正在尝试思考为什么缺少此 cookie,并提出了以下可能的原因:

  1. 该域的 Cookie 集合已满。- 如果是这种情况,我希望在每个请求中看到 20/50 个 cookie(顺便说一句,所有用户代理都是 IE7 和 IE8)并且不知何故 cookie 被丢弃了。我在各种异常情况下看到 3 到 23 个 cookie
  2. 已达到 cookie 的数据限制。- 这不会发生。通过查看日志,我可以看到 cookie 集合很小。
  3. 在添加 cookie 之前,将返回响应。- 不确定这个。在头部手动调用 Reponse.Flush 会导致异常,说明在发送响应后无法修改 cookie 集合。
  4. ?

绝望中,我求助于 SO 的人员,并询问我可以调查此丢失 cookie 的任何其他可能原因。

0 投票
2 回答
2414 浏览

asp.net-mvc - 是否可以在每次验证后更改 ASP.NET MVC 中的 AntiForgeryToken 值?

我们刚刚在我们使用 ASP.NET MVC 构建的应用程序上进行了一些渗透测试,并且返回的建议之一是 Form 中的 AntiForgeryToken 的值可以多次重新提交并且不会过期单次使用后。

根据围绕 Synchronizer Token Pattern的OWASP 建议:

“一般来说,开发者只需要为当前会话生成一次这个令牌。”

这就是我认为 ASP.NET MVC AntiForgeryToken 的工作方式。

万一我们不得不打仗,是否有可能让 AntiForgeryToken 在每次验证后重新生成一个新值?

0 投票
2 回答
857 浏览

jquery - jQuery ASP.NET MVC JSON 调用可破解?

我有一个基本的 JsonResult 方法,在我的视图中被 jQuery $.ajax 调用调用。

所以我的问题是,这个方法可以被调用/被黑客攻击并传递错误的数据吗?假设这是在系统中创建一个新用户。我可以伪造对这个方法的调用吗?我应该如何使用某种防伪令牌或任何东西来保护这种方法?

0 投票
1 回答
497 浏览

asp.net-mvc - AntiForgeryToken 验证失败时会显示哪些信息?

我有一些表格的公共网站。

简单的问题:
当 AntiForgeryToken 验证失败时,我应该显示什么样的信息?

它应该是 404(找不到页面),错误还是忽略它并重定向到主页?

0 投票
2 回答
2886 浏览

asp.net - MVC 2 AntiForgeryToken - 为什么是对称加密 + IPrinciple?

我们最近更新了我们的 MVC 2 解决方案,这更新了AntiForgeryToken工作方式。不幸的是,这不再适合我们的 AJAX 框架。

问题是 MVC 2 现在使用对称加密来编码关于用户的一些属性,包括用户的Name属性(来自IPrincipal)。我们能够使用 AJAX 安全地注册新用户,之后后续的 AJAX 调用将无效,因为当用户被授予新的委托人时,防伪令牌将发生变化。还有其他情况可能会发生这种情况,例如用户更新其姓名等。

我的主要问题是为什么 MVC 2 甚至会费心使用对称加密?那么它为什么要关心主体上的用户名属性呢?

如果我的理解是正确的,那么任何随机共享的秘密都可以。基本原则是用户将收到一个带有一些特定数据的cookie(HttpOnly!)。然后需要这个 cookie 来匹配每个可能有副作用的请求(通常是 POST)发回的表单变量。由于这只是为了防止跨站点攻击,因此很容易制作一个可以轻松通过测试的响应,但前提是您可以完全访问 cookie。由于跨站点攻击者无法访问您的用户 cookie,因此您受到保护。

通过使用对称加密,检查 cookie 的内容有什么好处?也就是说,如果我已经发送了一个 HttpOnly cookie,那么攻击者就无法覆盖它(除非浏览器存在重大安全问题),那么为什么我还需要再次检查它呢?

经过考虑,它似乎是那些“增加安全层”的案例之一——但如果你的第一道防线已经下降(HttpOnly),那么攻击者无论如何都会越过第二层,因为他们有完全的访问权限到用户的 cookie 集合,并且可以直接模拟他们,而不是使用间接 XSS/CSRF 攻击。

当然,我可能遗漏了一个主要问题,但我还没有找到它。如果这里有一些明显或微妙的问题,那么我想知道它们。