C# 如何在编辑/更新模型期间保护ID实体属性?

C# 如何在编辑/更新模型期间保护ID实体属性?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我到处都在读,在创建允许修改模型的表单时,我应该使用[Bind(Exclude=“ID”)] 我理解为什么以及如何帮助。。。但我不明白为什么它会起作用 使用内置MVC模板创建编辑视图时。。。它仍然使用一个隐藏的Html来存储ID变量。在发布期间,我需要使用ID变量来知道需要更新哪个数据库记录 但是,我不能信任ID变量,因为它可能在发布期间被劫持 所以,我在ID上使用Bind exclude。此外,我不能信任隐藏变量。。。那么,我的帖子应该如何传递表单上正在编辑的记录的ID呢 我能想到的唯一解决办

我到处都在读,在创建允许修改模型的表单时,我应该使用[Bind(Exclude=“ID”)]

我理解为什么以及如何帮助。。。但我不明白为什么它会起作用

使用内置MVC模板创建编辑视图时。。。它仍然使用一个隐藏的Html来存储ID变量。在发布期间,我需要使用ID变量来知道需要更新哪个数据库记录

但是,我不能信任ID变量,因为它可能在发布期间被劫持

所以,我在ID上使用Bind exclude。此外,我不能信任隐藏变量。。。那么,我的帖子应该如何传递表单上正在编辑的记录的ID呢

我能想到的唯一解决办法。。。是使用一个会话变量来跟踪(在服务器端)正在编辑的记录

为什么人们不害怕这个?MVC在绑定期间是否做了一些额外的事情来确保ID没有更改


有人能解释一下我对MVC安全性不了解的地方吗?

您正在提交一份记录供编辑。那么,当有人编辑记录时,它就不会是一个安全问题。那张唱片是否出自上一张专辑并不重要


如果您有任何关于谁可以编辑哪些记录的业务规则,那么您应该(始终)在帖子上重新验证这些规则

场景:如果用户在会话中更改其帐户密码并破解/设置另一个ID,则密码将使用被破解的ID保存在帐户中。@Michael9000这正是为什么您也必须键入旧密码的原因。因此,您要说的是。。。MVC默认模板为您设置编辑的方式已经非常不安全了吗?不,MVC的安全性并不比其他web平台高或低。您需要重新检查您的安全概念,以及Id是否/如何发挥任何作用。