【发布时间】:2011-08-27 09:06:02
【问题描述】:
基本上,我有一张表,其中包含公司的一些属性。这是“主”表,它们的 ID 用于许多其他表。我基本上是通过这种方法找到他们的ID:
private Company currentcompany()
{
Company cuco = db.Companies.Single(x => x.username == User.Identity.Name);
return cuco;
}
我需要让用户能够更新存储在此表中的有关他们自己的各种详细信息,我做得非常好 - 但是,我发现了一个很大的安全漏洞!
在 Firefox 上使用 Tamper Data(我想象 Fidler/许多其他人),我可以轻松更改隐藏的 ID 并修改其他公司的详细信息。
为了阻止这种情况,我在修改操作中添加了以下几行:
Company cuco = currentcompany();
if (company.id != cuco.id)
{
return Content("Security Error");
}
(仅供参考 - Company 是代表公司的模型/POCO,company 本身就是表单数据。)
添加后,如果我在表单数据中编辑 ID,它会按预期工作并显示“安全错误”,但是,如果没有错误并且我继续,我会收到问题中的错误.
“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”
我相信这是因为 EF 以某种方式检测并保留了第一个数据提取,但我不确定如何纠正它。
有什么建议吗?
编辑- --更新--
如果你能理解我想要达到的目标,有没有更好的方法来解决这个问题?
【问题讨论】:
-
仅供参考 - 我已经阅读了相关栏上的类似问题,但看不到解决方案。 :(
标签: entity-framework