问题标签 [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 投票
1 回答
2408 浏览

asp.net-mvc-3 - AntiForgeryConfig.CookieName 与 HttpContext.Request.Cookies 不一致 - 为什么?

我们有一个用 ASP.NET MVC 3 编写的应用程序,它使用@Html.AntiForgeryToken().

我们想在我们的自定义属性中验证令牌(不需要指定默认属性[ValidateAntiForgeryToken])。这应该很简单,但我发现了一个有趣的不一致之处。

  1. 下面的所有代码都在以下方法中运行:

    /li>
  2. AntiForgeryConfig.CookieName值为__RequestVerificationToken。这似乎是有道理的。

  3. filterContext.HttpContext.Request.Cookies包含 1 个 cookie - 但它的名称是__RequestVerificationToken_Lw__.

问题:这两个不应该是相同的,所以我可以使用以下代码段来获取 cookie?

0 投票
1 回答
390 浏览

asp.net-mvc-4 - 登录表单中的防伪令牌

我阅读了几篇关于在表单中使用防伪令牌来防止 CSRF 攻击的文章。我了解攻击者可以使用单击链接、图像或其他任何内容的人的凭据来创建 http 请求获取或发布到这些表单。

在登录表单中使用防伪令牌有什么好处吗?考虑到攻击者想要将信息提交到需要进行身份验证的 html 表单,如果登录页面是要进行身份验证的入口点,那么攻击者有什么用处?

请注意,我使用的是 Asp.Net MVC 4。

谢谢你。

0 投票
5 回答
19625 浏览

c# - 在 MVC 4 应用程序中正确处理 HttpAntiForgeryException 的方法

这是场景:

我有一个登录页面,当用户签名时,它被重定向到主页应用程序页面。然后用户正在使用浏览器后退按钮,现在他在登录页面上。他尝试再次登录,但现在抛出异常:

HttpAntiForgeryException (0x80004005):提供的防伪令牌用于用户“”,但当前用户是“用户名”。

我知道这与缓存有关。我使用自定义 NoCache 过滤器禁用了登录操作的浏览器缓存,该过滤器设置了所有必需的标头 - 无缓存、无存储、必须重新验证等。但是

  • 这不适用于所有浏览器
  • 尤其是 Safari(大多数情况下是移动设备)完全忽略此类设置

我将尝试进行黑客攻击并强制 safari mobile 刷新,但这不是我所期望的。

我想知道我是否可以:

  • 处理异常而不向用户显示任何问题存在(对用户完全透明)
  • 通过替换防伪令牌用户名来防止此问题,这将允许用户再次登录而不会出现此异常,如果我与浏览器缓存相关的黑客将在下一版本的浏览器中停止工作。
  • 我真的不想依赖浏览器的行为,因为每个人的行为都不同。

更新 1

澄清一下,我知道如何处理 MVC 中的错误。问题是这种处理错误根本没有解决我的问题。错误处理的基本思想是重定向到带有好消息的自定义错误页面。但我想防止这个错误发生,而不是以用户可见的方式处理它。通过句柄,我的意思是捕获用户名替换或其他合适的操作,然后继续登录。

更新 2

我添加了以下对我有用的解决方案。

0 投票
1 回答
928 浏览

asp.net-mvc - 找不到名为 Yahoo.Yui.Compressor.Resources.Microsoft.IdentityModel.dll 的嵌入式资源程序集

我在我的 NopCommerce 网站上使用了一个名为 BundleTransformer 的组件,它扩展了 MVC4 的“捆绑”功能。它使用另一个名为 Yahoo.Yui.Compressing 的组件来转换和压缩 javascript 文件。一切正常。JS 文件按预期压缩和捆绑。

但是,AntiForgeryToken 似乎存在问题。在我的注册页面中,我在表单中添加了这个简单的行:

这似乎与 Yahoo.Yui.Compressing 冲突。我收到的错误消息如下:

有谁知道解决方案?

它似乎是 Yahoo.Yui.Compressor、BundleTransformer 或 AntiForgeryToken 之间的错误。

0 投票
2 回答
4273 浏览

jmeter - 用于具有动态令牌的页面的 Jmeter

我正在使用 JMeter 记录一组页面。一些页面具有动态生成的令牌存储在隐藏字段中。

我使用 xpath 提取器检索此令牌,查询是 //input[@name='__RequestVerificationToken']/@value,将其存储在变量中并将此变量用于下一个请求。

我不知道为什么这个请求会失败。我已经在查看结果树中检查了请求值。在原始选项卡中,该值与隐藏字段的值完全相同,而在 http 选项卡上,最后缺少“==”。

0 投票
2 回答
3602 浏览

jquery - 如何在 Struts2 应用程序中为 AJAX 请求做 CSRF 保护

我有一个 struts2 webapp,我需要在其中实现 CSRF 保护。对于统计表格,它非常简单。我只需要激活tokenSession拦截器然后<s:token/>在要提交的表单中设置。(解释herehere

但是,当我需要为不一定通过表单提交的 POST AJAX 调用(我使用的是 jQuery)启用 CSRF 保护时,就会出现问题。在进行后续 AJAX 调用时,我面临重用令牌的问题。

任何指针或不同的方法都值得赞赏。

0 投票
1 回答
1194 浏览

asp.net-mvc-3 - 为 Telerik 上传控制实现防伪

当一个 ajax 调用时,我遇到了为 POST 方法实现防伪令牌,我在这里做的几件事是

[1]包括[ValidateAntiForgeryToken]我的 POST 控制器方法的属性。

[2]在我的 js 中更改$.ajax调用。$.ajaxAntiForgery

同样,我有一个telerik上传控件,我从cshtml触发控制器方法(而不是ajax调用)-下面的cshtml代码片段

在这种情况下,如何实施防伪?我需要在 cshtml、控制器中做哪些更改?

谢谢, 阿达什

0 投票
2 回答
1478 浏览

asp.net-mvc - 如何在 mvc 4 中使用 JSON 帖子测试 AntiForgeryToken

我使用 MVC 4 Visual Studio 2012 将 Json 发布到控制器...我已成功将 json 数据与 AntiForgeryToken 一起传递给控制器​​,但我不知道如何准确测试它是否真的在工作“AntiForgeryToken 的正确性”。我还尝试在客户端的 __RequestVerificationToken 代码中添加 9999 以查看它是否在服务器端进行验证,并且确实如此!!!。我的猜测是,如果我是正确的,它不应该????这是我的代码

0 投票
1 回答
3515 浏览

c#-4.0 - 防伪令牌

我已经使用 MVC.NET 4.0 完成了一个网站,并且在我的本地主机上一切正常。但是,当我将网站上传到我的服务器上并尝试使用我的用户名和密码登录时,我在登录时遇到错误:-

究竟是什么问题?我是否需要更改帐户控制器的登录操作中的任何内容?

谢谢你的帮助

0 投票
1 回答
1713 浏览

winforms - 在 Winform 和 WebAPI 中处理 AntiForgery 令牌

ValidateAntiForgeryTokenAttribute从非浏览器客户端调用时,在具有属性的方法上处理 Antiforgery 的最佳方法是什么WinForm

据我所知,以下是防伪的工作原理:

  1. 隐藏的输入字段被添加到页面,例如

  2. 一个同名的cookie也被发送到客户端

  3. 在下一个请求中,cookie 和隐藏的输入字段都被发送到服务器。服务器调用AntiForgery.Validate(token, cookie)以确认请求是合法的。

在网络应用程序中一切正常。它似乎在 WinForm 中不起作用。这是我所做的:

  1. 使用HttpClient,我可以访问包含令牌的页面。
  2. 我解析页面并抓取隐藏的输入字段。我也拿起饼干。
  3. 我按原样传递cookie。最重要的是,我添加了一个__RequestVerificationToken带有隐藏字段值的新标题。
  4. 我进入服务器代码。
  5. AntiForgery.Validate(xx,yy)失败并出现错误: 提供的防伪令牌用于用户 X,但当前用户是 Y。