MVC 2 AntiForgeryToken - 为什么对称加密 + IPrinciple?

2024-03-31

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

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

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

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

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

想一想,这似乎是“增加安全层”的情况之一 - 但如果你的第一道防线已被攻破(仅 Http),那么攻击者无论如何都会突破第二层,因为他们拥有完全访问权限到用户的 cookie 集合,并且可以直接模拟他们,而不是使用间接的 XSS/CSRF 攻击。

当然,我可能会遗漏一个重大问题,但我还没有找到它。如果这里存在一些明显或微妙的问题,那么我想了解它们。


添加它是为了在一个子域试图攻击另一个子域的情况下提供更好的保护 - bad.example.com 试图攻击 good.example.com。添加用户名会使 bad.example.com 更难以在幕后联系 good.example.com 并尝试让它代表您生成令牌。

展望未来,cookie 可能会被删除,因为它对于系统的正常运行并不是绝对必要的。 (例如,如果您使用表单身份验证,that例如,cookie 可能仅在匿名用户的情况下发出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 2 AntiForgeryToken - 为什么对称加密 + IPrinciple? 的相关文章

随机推荐

  • 使用 Javascript 获取支持 bean 值

    JSF 2 0 莫贾拉 2 0 1 PrimeFaces 3 4 1 有类似的问题 但我需要某物 别的 javascript函数必须等待backing bean方法 该方法正在填充想要从js函数中提取的变量 我想说的是
  • C++ 向量累加

    我试图对向量使用累积函数 vector
  • 在有序数组中添加额外的数字

    在已经上升的有序数组中插入新数字的最佳方法是什么 new number 6 old array array 1 3 4 5 7 8 10 new array must be 1 3 4 5 6 7 8 10 为什么不直接添加它并再次排序呢
  • OpenCV 2.4.1 - 在 Python 中计算 SURF 描述符

    我正在尝试更新我的代码以使用cv2 SURF 相对于cv2 FeatureDetector create SURF and cv2 DescriptorExtractor create SURF 但是 在检测到关键点后 我无法获取描述符 正
  • Android SU 权限:如何使用它们?

    这里有一种情况 我正在使用 Java 开发一个 Android 应用程序 我对这些东西都很熟悉 但现在这是我第一次需要使用 SU 权限 我只需要替换 实际上是重命名 system app 目录中的文件 但看起来我无法以通常的方式执行它 Fi
  • 启动python解释器时显示的消息的含义

    我知道这肯定是基本信息或知识 但我想知道 并且找不到答案 执行后立即显示什么信息或含义是什么python命令并启动解释器 例如 在这种情况下这意味着什么 Win32 上的 Python 3 8 7 tags v3 8 7 6503f05 2
  • Curl 返回 http 状态代码以及响应

    我使用curl 获取http 标头来查找http 状态代码并返回响应 我使用命令获取 http 标头 curl I http localhost 为了获得响应 我使用命令 curl http localhost 一旦使用 I 标志 我就只得
  • JUnit - 初始化程序错误中的异常

    我正在尝试使用静态方法测试一个类 但在这一行中出现错误 FormReferenceDataPopulator target new FormReferenceDataPopulator 这是失败的痕迹 java lang Exception
  • 防止导航到同一片段

    我正在使用带有 BottomNavigationView 的 Android 导航 jetpack 库 我已经实现了 NavHost NavGraph 和我的片段 当我使用操作进行导航时 一切都按预期进行 我使用以下代码来设置一切 val
  • 如何在 Angular 4 中创建分页组件? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个 API 端点 例如 list students page 5 rows 10带分页参数page and size 我想创建一个 a
  • 匹配平衡括号的正则表达式

    我需要一个正则表达式来选择两个外括号之间的所有文本 Example START TEXT text here possible text text possible text more text END TXT Result text he
  • 如何构建一个在用作 constexpr(如断言)时行为不同的自定义宏?

    从 C 14 开始 断言宏可以在函数中使用 即使它们被定义为 constexpr 我知道这与它的计算结果为 true 有关 但我无法弄清楚实际的代码是什么样子 具体来说 如何构建一个宏 该宏在运行时评估的 constexpr 函数中运行时打
  • PL/SQL 逗号分隔列表;删除重复项并放入数组中

    我有一个以逗号分隔的列表作为 PL SQL 过程中的字符串 我需要 删除重复项 将列表放入数组中 我发现了多种方法可以做到其中之一 但不能同时做到两者 有什么帮助吗 有一个众所周知的 SQL 技巧可以将逗号分隔的列表转换为行 只需使用这个技
  • 限制 .map 循环中的项目

    我想问一下如何限制我的 map例如 仅循环到 5 个项目 因为当前当我访问 api 时 它返回 20 个项目 但我只想显示 5 个 我发现大多数情况只是循环整个对象数组 而不是将其限制为多个项目 注意 我无法控制 API 因为我只是使用 m
  • libtool:i686-pc-mingw32 共享中不允许未定义的符号

    我正在使用自动工具作为我的库的构建系统 最近库被移植到Windows 尽管我遇到了一个奇怪的错误 但库编译和链接成功 配置和make后只有静态库 除了警告之外 一切看起来都很好libtool libtool undefined symbol
  • 在 C# 中,有没有办法在运行时确定类的成员?

    假设我有一个名为 foo 的类 它有 3 个公共成员 foo1 foo2 和 foo3 现在假设我正在编写一个函数 它将 foo 类的实例作为参数 但是当我编写这个函数时 我不知道它有哪些公共成员 有没有办法让我在运行时确定它具有公共成员
  • React.js 通过 Router 传递参数,而不是在 URL 中

    您好 我想从一个页面移动到另一页面并传递参数search and type 如果 URL 中没有这些参数 我可以使用 React Router 来实现此目的吗 我正在看这个https github com rackt react route
  • 如何更改应用栏颤动上的文本和图标的颜色

    我在更改颤动应用栏上的文本和图标小部件的颜色时遇到问题 我已经在材料应用程序中尝试过主题 但它不起作用 这是在哪里工作 title Text Profile style TextStyle color Colors black 但我想将其应
  • 在窗口中的标题栏内/上方添加用户控件

    在 WPF 中 我想在窗口的标题栏中 上方添加一个 userControl 如下所示 红色部分是UserControl 绿色部分是标题栏 现在我希望能得到你的一些建议 需要扩展Window类或者只是自定义Window的样式 最好提供源码 您
  • MVC 2 AntiForgeryToken - 为什么对称加密 + IPrinciple?

    我们最近将解决方案更新为 MVC 2 这更新了AntiForgeryToken作品 不幸的是 这不再适合我们的 AJAX 框架 问题是 MVC 2 现在使用对称加密来编码有关用户的一些属性 包括用户的Name财产 来自IPrincipal