- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们最近更新了 MVC 2 的解决方案,这更新了 AntiForgeryToken
的方式。作品。不幸的是,这不再适合我们的 AJAX 框架。
问题是 MVC 2 现在使用对称加密来编码关于用户的一些属性,包括用户的 Name
属性(property)(来自 IPrincipal
)。我们能够使用 AJAX 安全地注册新用户,之后后续的 AJAX 调用将无效,因为当用户被授予新的委托(delegate)人时,防伪 token 将发生变化。还有其他情况可能会发生这种情况,例如用户更新其姓名等。
我的主要问题是为什么 MVC 2 甚至会费心使用对称加密?那么它为什么要关心主体上的用户名属性呢?
如果我的理解是正确的,那么任何随机共享的 secret 都可以。基本原则是用户将收到一个带有一些特定数据的cookie(HttpOnly!)。然后需要这个 cookie 来匹配每个可能有副作用的请求(通常是 POST)发回的表单变量。由于这只是为了防止跨站点攻击,因此很容易制作一个可以轻松通过测试的响应,但前提是您可以完全访问 cookie。由于跨站点攻击者无法访问您的用户 cookie,因此您受到保护。
通过使用对称加密,检查 cookie 的内容有什么好处?也就是说,如果我已经发送了一个 HttpOnly cookie,那么攻击者就无法覆盖它(除非浏览器存在重大安全问题),那么为什么我还需要再次检查它呢?
在考虑之后,它似乎是那些“增加安全层”的案例之一——但如果你的第一道防线已经下降(HttpOnly),那么攻击者无论如何都会越过第二层,因为他们有完全的访问权限到用户的 cookie 集合,并且可以直接模拟他们,而不是使用间接 XSS/CSRF 攻击。
当然,我可能遗漏了一个主要问题,但我还没有找到它。如果这里有一些明显或微妙的问题,那么我想知道它们。
最佳答案
添加它是为了在您有一个子域试图攻击另一个子域的情况下提供更大的保护 - bad.example.com 试图攻击 good.example.com。添加用户名使 bad.example.com 更难在幕后联系 good.example.com 并尝试让它代表您生成 token 。
展望 future ,cookie 可能会被删除,因为它对于系统的正常运行并不是绝对必要的。 (例如,如果您使用表单例份验证,则该 cookie 可以用作反 XSRF cookie,而不是要求系统生成第二个 cookie。)例如,该 cookie 可能仅在匿名用户的情况下发布。
关于asp.net - MVC 2 AntiForgeryToken - 为什么是对称加密 + IPrinciple?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2697772/
在同一页面的另一个 View 中成功登录后,我需要在 View 中的表单中重新加载 AntiForgeryToken。 我可以通过 jQuery 使用结果登录页面中的新 key 在表单输入 @Html
我正在尝试防止 CSRF 并有两个场景: 从另一个站点内执行 POST 并且在我启用 AntiForgeryToken 时失败 我已经尝试从我的“恶意”Javascript(在另一个站点上运行)首先执
我正在 MVC 应用程序中实现 CSRF。我创建了自定义属性来验证 token ,因为我的输入是 json 编码并由 Ajax 调用。它在同一项目中工作正常,但当任何按钮或链接在同一解决方案中跨不同项
我正在将安全性应用于我的 .net 3.5 mvc2 Web 应用程序。我的网站不包含任何用户身份验证,并且由 .js 文件中的许多 ajax 调用组成 在我的 .aspx 文件中我写道 在我的
我知道 CSRF 的基础知识和 AntiForgeryToken . 我也知道有很多类似的questions周围但似乎没有描述实现细节,这是我感兴趣的部分。 每次调用 Html.AntiForgery
这个问题在这里已经有了答案: how AntiForgeryToken() works in MVC and how to retrieve value at server action metho
我在 ASP.NET Core 2.2 中使用 IdentityServer4。在登录后方法上,我应用了 ValidateAntiForgeryToken。通常在登录页面上停留 20 分钟到 2 小时
我有一个带有 AntiForgeryToken 表单的布局页面 using (Html.BeginForm(action, "Account", new { ReturnUrl = returnUrl
我目前正在ASP.net中开发MVC应用程序。我正在使用AJAX.ActionLink在记录列表中提供删除链接,但是这是非常不安全的。我把这个: 在函数上执行删除操作,这将阻止仅通过URL调用该函数
我正在开发一个使用 asp.net core2 和 Angular 运行的网络 API 应用程序。详细的开发环境配置为here .我正在尝试配置 AntiForgeryToken 验证,但它一直失败。
我的流程非常简单;用户使用登录表单登录。登录表单执行一个帖子,并定义一个 @Html.AntiForgeryToken。在服务器上,操作方法定义[ValidateAntiForgeryToken]来验
我有一个场景,我不需要发送表单数据,但需要通过 ajax 调用发送一些其他数据。我有一个包含 html.AntiForgeryToken() 的表单。 这是我尝试过的。 var modid = $("
在我部署一些在测试中似乎有效的代码之前,使用 AntiForgeryToken 是否存在任何问题?部署到 Azure WebRole 时。因为它生成一些 html 和 cookie,所以我担心以下..
我发布这个是因为这让我们忙了一天,而且我们在 Internet 上找不到任何关于这个解决方案的信息,所以这是为了节省人们以后的时间。这是问题: 如果您的 View 中有一个 @Html.AntiFor
我正在使用 AntiForgeryToken 辅助方法。据我了解,AntiForgeryToken 是基于 session 的,因此每个用户都具有相同的 token ,但另一个用户将具有不同的 tok
有人可以告诉我更多关于它的细节吗? 最佳答案 基本上,防伪 token 会阻止任何人向您的站点提交由并非由实际用户生成的恶意脚本生成的请求。有一个 HTTP only cookie(不能被浏览器中运行
我在让 Microsoft 的 MVC 的 [ValidateAntiForgeryToken] 与使用 Marionette & Backbone 编写的单页应用程序 (SPA) 配合使用时遇到问题
AntiForgeryToken 是否应该应用于 ASP.NET MVC 应用程序中的每个后操作?我完全想不出您不想在每个后期操作中包含此内容的任何原因,但似乎没有人真正建议在您的所有操作中使用它。
我有一个用户可以在不登录的情况下发布的表单。但是,如果他的电子邮件被识别,则需要密码。密码表单通过 Ajax 进行验证,如果成功,则提交主表单。两种形式都需要有效的 AntiForgeryToken。
我感兴趣为什么不是 AntiForgeryToken默认情况下包含在每个 ASP.NET MVC 表单中?似乎总是包含它的好处大于可能的缺点。如果需要,可以禁用此行为,例如 Web 表单 HttpRe
我是一名优秀的程序员,十分优秀!