在 ASP.NET MVC ViewModel 中存储模型 ID,安全问题

2024-04-18

在我的 MVC 应用程序中,我有一个页面供用户编辑其帐户详细信息,例如电子邮件地址、密码等。在我的数据库中,用户表保存此数据,主键是 UserId。

在我创建的 ChangeAccountDetails 视图上,我传递了一个 ViewModel,其中包含用户应该能够在其帐户上修改的数据。我还将 UserId 存储在 ViewModel 中,该视图模型呈现在我的实际视图上的隐藏字段中。我担心这不安全,因为在保存更改的数据的 POST 操作中,我的服务层会加载刚刚由 ViewModel 中发回的 UserId 更改的用户帐户详细信息的持久版本。

我已使用 Fiddler 更改 POST 请求,并将 UserId 更改为数据库中另一个用户记录的 UserId,这可能会产生严重问题,因为有人可能会以这种方式更改其他人的密码和/或其他详细信息。

请有人建议我在使用 ViewModel 时如何避免此类问题。在这种情况下使用 Session 是唯一的方法吗(我知道最好避免使用 Session 但为此目的又如何)?


我通过加密 sessionKey 的方法来完成此操作,该加密密钥保存用户详细信息,例如 ID 等。表单上 ID 的隐藏字段始终为零,并且将其更改为我的 user.UserId 的 ID。

我有一个用户模型(用户),该模型填充了会话中的解密数据,这就是我处理用户级别等的方式。

我未加密的字符串如下所示: userid||email||datetimelogin||users-GUID||真实姓名||用户级别

然后使用自己的私钥在 255 处对其进行加密。

只是一个想法,很好的一点,但我想对于大多数人来说,很容易忘记人们可以篡改 ID。

zasz 的上述想法也完全有效,但是您必须构建一个视图模型来解释 GUID 的额外字段并解释丢失的 UserId 字段。

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

在 ASP.NET MVC ViewModel 中存储模型 ID,安全问题 的相关文章

  • 使用 google app-engine 跨浏览器/服务器重新启动会话持久性

    如何使会话在浏览器 服务器重新启动后持续存在 我正在使用谷歌应用程序引擎 每次重新启动浏览器和 或服务器时 我都会得到一个新的会话 ID String jSessionId this getThreadLocalRequest getSes
  • 使用 ViewModel 设计 MVC 存储库

    我想创建一个存储库类来将我的数据逻辑与控制器分开 我使用 ViewModel 来表示一些数据 这些数据将填充来自不同表的数据 我有一些问题 对于像这样的方法GetAll 我要返回一个IQueryable
  • 如何在 html 助手中使用 asp.net mvc 3 razor 执行内联样式

    我想做这个 Html TextBoxFor x gt x BackgroundColor new style width 20px background color Model BackgroundColor 然而它不会渲染我的 Mode
  • 将 C# 参数传递给 JS

    我有一个 C MVC 项目 我想每隔 X 秒刷新一次页面 我将代码放入cshtml文件中 但我需要从 C 中获取 X 假设它是 ViewBag Seconds 我怎样才能做到这一点 Razor 不关心它是输出 HTML 还是 javascr
  • 为什么呼叫会话不起作用? (代码点火器 3)

    我的配置是这样的 config sess driver database select database driver config sess save path ci sessions name of the mysql table co
  • jQuery Mobile/MVC:使用 RedirectToAction 更改浏览器 URL

    我的第一篇文章 当我使用 RedirectToAction 时 浏览器中的 url 不会改变 我怎样才能实现这个目标 在使用 Web 表单 10 多年后 我将切换到 ASP NET MVC 3 0 也使用 jQuery Mobile 我已经
  • 保护登录和评论表单免受 CSRF 攻击

    我读过很多关于CSRF保护的文章 这个不错 http seclab stanford edu websec csrf csrf pdf 以及关于SO的各种问题 但它们似乎都没有足够的信息来回答我的问题 我正在开发自己的 CMS 我想保护我的
  • 是否可以将密码以纯文本形式存储在 php 变量或 php 常量中?

    根据问题 在 php 页面上存储密码是否安全 例如 password pa w0rd 如果用户看不到它 那就安全了 对吗 编辑 确实有人建议使用hash 但是数据库服务器连接密码会有问题不是吗 简短的回答是否定的 而且要看情况 以纯文本形式
  • 基本身份验证:是否可以像 getRemoteUser() 一样设置RemoteUser

    您好 我正在使用基本身份验证方法来保护我的 Web 应用程序中的某些页面 其中有指定的 url 模式如下
  • 如何创建设置为太平洋标准时间午夜的 DateTimeOffset

    我正在使用 Quartz NET http quartznet sourceforge net http quartznet sourceforge net 我试图将开始日期设置在午夜 但我在创建这个日期时遇到问题 该应用程序将位于不同时区
  • 使用 KMS 的 AWS RDS 加密是否会影响性能?

    Amazon states https aws amazon com about aws whats new 2015 01 06 amazon rds encryption with kms mysql postgresql that 加
  • ExtJs 5 网格存储/视图模型绑定:无法修改 ext-empty-store

    我正在为这个拔掉头发 我有一个带有一些网格 一个商店和一个 viewModel 的视图 我需要不同网格中商店的不同过滤版本 因此我尝试将每个过滤商店绑定到网格 现在我什至无法让商店加载到网格中 我的代码如下所示 Store Ext defi
  • “设备重置为出厂设置”是否会使数据无法恢复? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 关于德克萨斯大学的结论 信息安全报告 https wikis utexas edu display ISO Google Android Harden
  • PHP - 停止显示错误中的完整路径

    有什么方法可以告诉 PHP 不显示错误 警告或通知消息中存在任何错误的文件的完整路径 我知道我可以禁用错误 但是 只是为了避免任何风险 例如 我的脚本返回一个错误 显示如下 Fatal error Call to undefined fun
  • 使用 REST API 进行正确的会话管理

    我已经完成了 RESTful API 的设计 其中我使用作为参数发送的 API 令牌对每个请求进行身份验证 现在我想创建一个客户端界面 我想知道什么是管理每个客户端的会话的正确安全方法browser客户 我想过一个流程来保持服务器端无状态
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用
  • 如何选择性地呈现 ASP.Net MVC 3 中的某个部分?

    在我的网站上 我有一个部分 浮动侧边栏 我只想为一部分用户 管理员 呈现该部分 我希望我可以将逻辑放入主布局中 以确定是否应显示该部分 但如果未呈现该部分 则会导致页面上出现错误 示例代码 Layout cshtml code if use
  • Java Keystore 是否存在性能问题? [复制]

    这个问题在这里已经有答案了 我们开发了一个应用程序来加密 解密来自服务器的请求 响应 我们正在做性能测试 加密 解密应用程序 我们观察到加密 解密过程需要时间 而许多线程 正在同时做 为了识别问题 我们记录了加密 解密过程中的所有方法 从记
  • 模型绑定到 MVC 中的列表

    我无法在服务器端检索简单的列表 有人能指出我正确的方向吗 public class TestList public string id get set public string name get set public string loc
  • 尝试利用?

    我看到我的 nopCommerce 网站记录了以下搜索 ADw script AD4 alert 202 ADw script AD4 我有点好奇他们想要完成什么 我搜索了一下 似乎是ADw script AD4 以 UTF7 编码为

随机推荐

  • Qt 线程阻止 UI 响应

    我想我可能误解了Qt线程中的几个概念 在我的窗口类中 它派生自 QWidget class Widget Q OBJECT public Widget Widget QObject parent 0 QObject parent moveT
  • XNA 数字锁定影响输入

    我有一个中断 在键盘按键上给我协调键 当数字锁打开时 按键会显示为 Numpad1 Numpad2 等 当数字锁关闭时 数字键盘键会变成 End Left Right Up PageLock 我不能让这种情况发生 因为我需要将这些键 左 右
  • 确定 iPhone 上的互联网可用性?

    我在 iPhone 应用程序中使用 NSURLConnection 如下所示 NSURLConnection conn NSURLConnection alloc initWithRequest request delegate self
  • 有没有办法简化 C# 中的反射委托代码?

    In this https stackoverflow com a 12867132 171121回应 我想出了以下辅助方法 可以被不同的人重用Task创建者将事件转换为任务完成源 Helper method static Task
  • PySpark,Win10 - 系统找不到指定的路径

    我之前将 PySpark 作为通过 pip 安装的 Python 包安装 最近我使用干净版本的 Python 卸载了它并下载了独立版本 在我的用户变量中 我创建了一个名为 SPARK HOME 的路径 值为 C spark 2 3 2 bi
  • 尝试在 iPhone 上调试应用程序时收到消息“已添加、修改或删除签名资源”

    在尝试在 iPhone 设备上调试使用 3 2 SDK 创建的版本时 我收到消息 已添加 修改或删除了签名资源 我可以清理 重建 然后安装 不会出现错误 但如果我尝试在不清理的情况下安装 则会显示错误 任何人都知道可能是什么原因造成的 我找
  • Jenkins/Apache 反向代理错误

    根据我的搜索 我遇到了一个似乎相当常见的问题 但是我已按照我遇到的所有说明和 或修复进行操作 但没有一个对我有用 所以我问这个希望有人可以引导我走向正确的方向 我在 OS X 10 11 2 上通过 Homebrew 安装了 Jenkins
  • 如何使用 ifstream 正确从文件中读取 unsigned int 变量?

    我的代码从文本文件中读取 unsigned int 变量Input File Name unsigned int Column Count Cols unsigned int Row Count Rows try ifstream inpu
  • 如何使用Jqplot在同一个堆积条形图中显示两组不同颜色的条形

    我想制作一个包含两组堆叠条形图的条形图 将它们组合在一起以比较两组堆叠条形图 应按以下方式显示 我经历过这个link http www jqplot com tests bar charts php 但它并没有帮助我绘制如上图所示的内容 我
  • 为按钮添加 UAC 防护罩并保留其背景图像?

    在 winforms 应用程序中使用 C 和 Net 4 0 是否可以将 UAC 屏蔽添加到按钮并保留按钮背景图像 如何 这就是我现在正在使用的 但它删除了图像 DllImport user32 dll public static exte
  • Java中获取SMB共享文件名和权限

    我想要连接到 SMB 服务器并浏览其文件 对于给定的路径 能够检索文件和文件夹的列表以及名称和权限 我需要支持所有 SMB 方言 并且能够从我的代码中做到这一点 代码大概如下 smbClient connect serverInfo inf
  • 如何命名在存储过程中返回的数据集的表?

    我有以下存储过程 Create procedure psfoo AS select from tbA select from tbB 然后我以这种方式访问 数据 Sql Command mySqlCommand new SqlCommand
  • UICollectionView ClipsToBounds 无法与分页正常工作

    我正在使用启用水平分页的 UICollectionView 我的 collectionView 框架小于屏幕尺寸 我使用了以下代码 myCollectionView clipsToBounds FALSE 我仍然无法看到 Collectio
  • 奇怪的 Java 转换异常。为什么我不能将 Long 转换为 Float?

    为什么我不能将 Long 转换为 Float 我收到此错误消息 java lang ClassCastException java lang Long 无法转换为 java lang Float 为什么这是个问题 我尝试转换的数字是域 10
  • 处理程序/可运行延迟有时会产生不同步的事件

    当尝试学习如何创建延迟时 我研究并发现主要答案是使用 Handler Runnable postDelayed Handler handler new Handler final Runnable r new Runnable public
  • 什么时候使用Q_NULLPTR?

    I see Q NULLPTR在 Qt 源代码和示例中被广泛使用 但我没有找到关于它到底是什么以及何时应该使用的文档 例如在这个官方示范 http doc snapshots qt io qt5 5 6 qtserialbus can ma
  • 检测 YouTube 视频何时播放完毕

    如何在官方 YouTube Android 应用程序中检查 YouTube 视频何时播放完毕 在 LogCat 中 我看到以下内容 VideoStage MEDIA PLAYING VIDEO 有什么方法可以检测到什么时候完成吗 你可以使用
  • 最高序数枚举值

    我正在寻找从 bean 列表中的枚举属性列表计算最高序数枚举值 例如 我有 Data public class MyBean private Priority priority and public enum Priority URGENT
  • python字典日期时间作为键,keyError

    我正在尝试在 Linux 中使用 cron 运行 Python 脚本 它应该构建一个数据字典 我正在尝试使用datetime now time 作为字典中的键 但它似乎会引发错误 不可以datetimetype 可以用作Python 中的字
  • 在 ASP.NET MVC ViewModel 中存储模型 ID,安全问题

    在我的 MVC 应用程序中 我有一个页面供用户编辑其帐户详细信息 例如电子邮件地址 密码等 在我的数据库中 用户表保存此数据 主键是 UserId 在我创建的 ChangeAccountDetails 视图上 我传递了一个 ViewMode