Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按键更新(整数)安全问题_C#_Sql_Asp.net Mvc_Security - Fatal编程技术网

C# 按键更新(整数)安全问题

C# 按键更新(整数)安全问题,c#,sql,asp.net-mvc,security,C#,Sql,Asp.net Mvc,Security,我们的数据库的主键是整数。让我们假设一个用例,其中有代表管理分配给他们的不同客户。一种情况是代表可以更新客户联系信息。我们的页面按id显示联系信息。当代表按update时,它会使用id进行更新。这会带来安全问题。如果代表更改id,他们可以查看并更新其他客户(可能未分配给他们)的联系信息。我相信这是一个普遍的问题 一种方法可能是在会话中保留密钥,加密id,并在更新时使用该密钥对其解密。有更好的办法吗 另外,由于不同的页面也需要这样做,我们在asp.net mvc中是否可以遵循一种通用方法?我猜您是

我们的数据库的主键是整数。让我们假设一个用例,其中有代表管理分配给他们的不同客户。一种情况是代表可以更新客户联系信息。我们的页面按id显示联系信息。当代表按update时,它会使用id进行更新。这会带来安全问题。如果代表更改id,他们可以查看并更新其他客户(可能未分配给他们)的联系信息。我相信这是一个普遍的问题

一种方法可能是在会话中保留密钥,加密id,并在更新时使用该密钥对其解密。有更好的办法吗


另外,由于不同的页面也需要这样做,我们在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模式,因为这个例子是虚构的,但与我们的用例非常相似。