问题标签 [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.
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(更改或删除内容)也会导致不同的错误,修改页面上隐藏令牌输入的内容也是如此。
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 创建。但如果其他人有一些有价值的信息要添加,我会留下这个问题。
asp.net - ASP.NET MVC AntiForgeryToken 的验证问题
所以我有一个有趣的问题......我需要让我的 web 应用程序通过 IBM 应用程序扫描设备,然后才能将我的更改推送到生产环境。我的最新更改包括 ASP.NET MVC 中的 AntiForgeryToken。我测试过的每个浏览器都可以正常工作,没有问题。但是,当设备尝试提交表单时,会收到验证错误。查看验证令牌,该设备正在对帖子上的表单值进行 html 编码,因此字符串不匹配......这就是它们的样子:
cmiuJRHizXLPvlu9zHKmTwdJiHvq+n87CSJZkixkf/BLHayCPVITJhRCsWWirPWg - 从 cookie 中提取 cmiuJRHizXLPvlu9zHKmTwdJiHvq%2Bn87CSJZkixkf%2FBLHayCPVITJhRCsWWirPWg - 表单值
所以它正在将 + 转换为 %2B 和 / 转换为 %2F ...以前有人见过吗?这是客户端浏览器的问题吗?是否有 AntiForgeryToken 生成一个没有特殊字符的字符串,以便我可以通过此扫描获取我的应用程序?谢谢!
asp.net-mvc - 创建针对 html 安全漏洞的测试用例
在 ASP.NET MVC 以及测试用例项目中,
有人如何创建测试用例来测试控制器方法上的现有安全漏洞?
例如,如何为需要防伪令牌的调用创建测试用例?还是 XSS?
asp.net-mvc - ValidateAntiForgeryToken 使用 jQuery ajax 表单提交失败
我有一个 HTML 表单,我在其中动态添加一个文本字段并通过 jQuery 对该表单执行 POST 请求到 ASP.NET MVC 控制器。
如果我在控制器操作上调用没有 ValidateAntiForgeryToken 属性的 POST 请求,它工作正常。但是,当我将 ValidateAntiForgeryToken 属性添加到操作时,我得到以下异常:
“所需的防伪令牌未提供或无效。”
有没有人知道为什么会这样?
需要注意的一点是,cookie 中的令牌 id 似乎与表单中呈现的令牌完全不同。为什么这些可能不同?
那个行动:
形式(呈现):
渲染防伪令牌的原始视图:
asp.net-mvc - 响应中不存在 RequestVerificationToken cookie
我的 ASP.NET MVC 应用程序通过使用 ValidateAntiForgeryToken 属性并调用 Html.AntiForgeryToken 以使用令牌值写入隐藏的输入元素并将令牌放入 cookie 来防止 CSRF 攻击。
我的异常日志报告了 HttpAntiForgeryException 的出现,它们看起来像是由有效请求触发的(引荐来源网址看起来正确)。导致异常的 Response 在 Form 字段中还包含 __RequestValidationToken 以及令牌值。但是,请求中缺少必要的 cookie,导致验证失败并引发异常。
我正在尝试思考为什么缺少此 cookie,并提出了以下可能的原因:
- 该域的 Cookie 集合已满。- 如果是这种情况,我希望在每个请求中看到 20/50 个 cookie(顺便说一句,所有用户代理都是 IE7 和 IE8)并且不知何故 cookie 被丢弃了。我在各种异常情况下看到 3 到 23 个 cookie
- 已达到 cookie 的数据限制。- 这不会发生。通过查看日志,我可以看到 cookie 集合很小。
- 在添加 cookie 之前,将返回响应。- 不确定这个。在头部手动调用 Reponse.Flush 会导致异常,说明在发送响应后无法修改 cookie 集合。
- ?
绝望中,我求助于 SO 的人员,并询问我可以调查此丢失 cookie 的任何其他可能原因。
asp.net-mvc - 是否可以在每次验证后更改 ASP.NET MVC 中的 AntiForgeryToken 值?
我们刚刚在我们使用 ASP.NET MVC 构建的应用程序上进行了一些渗透测试,并且返回的建议之一是 Form 中的 AntiForgeryToken 的值可以多次重新提交并且不会过期单次使用后。
根据围绕 Synchronizer Token Pattern的OWASP 建议:
“一般来说,开发者只需要为当前会话生成一次这个令牌。”
这就是我认为 ASP.NET MVC AntiForgeryToken 的工作方式。
万一我们不得不打仗,是否有可能让 AntiForgeryToken 在每次验证后重新生成一个新值?
jquery - jQuery ASP.NET MVC JSON 调用可破解?
我有一个基本的 JsonResult 方法,在我的视图中被 jQuery $.ajax 调用调用。
所以我的问题是,这个方法可以被调用/被黑客攻击并传递错误的数据吗?假设这是在系统中创建一个新用户。我可以伪造对这个方法的调用吗?我应该如何使用某种防伪令牌或任何东西来保护这种方法?
asp.net-mvc - AntiForgeryToken 验证失败时会显示哪些信息?
我有一些表格的公共网站。
简单的问题:
当 AntiForgeryToken 验证失败时,我应该显示什么样的信息?
它应该是 404(找不到页面),错误还是忽略它并重定向到主页?
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 攻击。
当然,我可能遗漏了一个主要问题,但我还没有找到它。如果这里有一些明显或微妙的问题,那么我想知道它们。