C# 按键更新(整数)安全问题
我们的数据库的主键是整数。让我们假设一个用例,其中有代表管理分配给他们的不同客户。一种情况是代表可以更新客户联系信息。我们的页面按id显示联系信息。当代表按update时,它会使用id进行更新。这会带来安全问题。如果代表更改id,他们可以查看并更新其他客户(可能未分配给他们)的联系信息。我相信这是一个普遍的问题 一种方法可能是在会话中保留密钥,加密id,并在更新时使用该密钥对其解密。有更好的办法吗C# 按键更新(整数)安全问题,c#,sql,asp.net-mvc,security,C#,Sql,Asp.net Mvc,Security,我们的数据库的主键是整数。让我们假设一个用例,其中有代表管理分配给他们的不同客户。一种情况是代表可以更新客户联系信息。我们的页面按id显示联系信息。当代表按update时,它会使用id进行更新。这会带来安全问题。如果代表更改id,他们可以查看并更新其他客户(可能未分配给他们)的联系信息。我相信这是一个普遍的问题 一种方法可能是在会话中保留密钥,加密id,并在更新时使用该密钥对其解密。有更好的办法吗 另外,由于不同的页面也需要这样做,我们在asp.net mvc中是否可以遵循一种通用方法?我猜您是
另外,由于不同的页面也需要这样做,我们在asp.net mvc中是否可以遵循一种通用方法?我猜您是在查询字符串中显示ID,用户可以更改它。首先,不要那样做。用户敏感信息不应以纯文本形式在查询字符串中传递。您可以使用加密来加密id,然后在以后检索它 如果您有客户代表分配给他们,我假设您的数据库中以某种形式的访问控制列表存储了这些信息,对吗 如果是这种情况,那么您应该在服务器上强制用户X具有查看/更改/删除客户Y的权限。请检查GET/Edit/customer/1和POST/Edit/customer/1的权限,这样您就可以开始了
因为您没有显示任何代码或DB模式,所以我不能给您提供更具体的示例,但我希望我自己解释一下。您可以简单地使用一些盐渍。每次生成GUID时,在两者之间插入id(但在特定位置)。在发送的同时,使用这个盐渍。当你在查询字符串中收到它时,拿出你的id,然后把其他东西都拿走。为此,您可以编写所有人都将使用的静态类。您能告诉我们要使用哪些类来实现这一点吗?谢谢。一旦值被散列,您就无法检索它。需要使用一些加密或加密。这可能不是一个选项,因为客户代表可以编辑很多内容。比如联系人、订单等。要编辑联系人,url可能类似于/edit/customercontact?customerId=1&contactId=1。现在我们需要检查联系人id是否属于客户,客户是否属于正确的代表。同样,如果还有一个级别,则很难验证所有级别。我不能给出db模式,因为这个例子是虚构的,但与我们的用例非常相似。