Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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# 如何防止从服务器向UI公开主id?_C#_Asp.net Mvc - Fatal编程技术网

C# 如何防止从服务器向UI公开主id?

C# 如何防止从服务器向UI公开主id?,c#,asp.net-mvc,C#,Asp.net Mvc,我们有需要向客户公开的产品和产品图像API。我不想公开数据库中生成的产品id,因为它们是顺序id,任何攻击者都可以轻松更改。这些API不安全,因为我们通过JS使用它们,并且将暴露给多个客户端 客户机点击POST API/product/并且请求主体具有产品详细信息 在响应中,我们得到了产品uri,即/product/1/。这里1是产品id 此外,客户使用此产品id插入图像,如: /产品/1/图片/ 我担心我们会暴露身份证,任何人都可能会改变这些身份证。我读了一些东西。但我不清楚在MVC环境下解决

我们有需要向客户公开的产品和产品图像API。我不想公开数据库中生成的产品id,因为它们是顺序id,任何攻击者都可以轻松更改。这些API不安全,因为我们通过JS使用它们,并且将暴露给多个客户端

客户机点击POST API/product/并且请求主体具有产品详细信息

在响应中,我们得到了产品uri,即/product/1/。这里1是产品id

此外,客户使用此产品id插入图像,如:

/产品/1/图片/


我担心我们会暴露身份证,任何人都可能会改变这些身份证。我读了一些东西。但我不清楚在MVC环境下解决这个问题的正确方法是什么。我们可以将库存id存储在“会话”存储中吗?或者最好的解决方法是什么?

无论您将其存储在何处,客户端都必须拥有该id。俗话说“客户是敌人的手”。处理此问题的唯一正确方法是不关心ID,而是保护您的API,以便只有允许更改内容的用户才能这样做。

如果我正确理解了您的问题,当前流程如下:

  • 客户要求产品概述
  • 客户机将收到一个包含产品及其ID的列表
  • 客户可以打开产品详细信息
  • 客户端可以使用该ID插入图像 在我看来,你真的需要增加访问控制,所以更新任何东西都不仅仅需要知道一个ID

    如果您不能这样做,您可以添加一个长的、随机的、字母数字的次要ID列,并在输出中使用次要ID而不是普通ID,或者可以使用临时ID转换表


    也就是说,我仍然建议认真增加访问控制,这样人们只能更新他们被允许更新的内容。

    “API不安全,因为我们通过JS使用这些API,并且会暴露给多个客户端”听起来像是通过模糊实现的安全性——通常是个坏主意。也就是说,uniqueidentifier列映射到C#中的Guid,除非您告诉数据库这样做,否则它们不是顺序的。我们如何保护将从web客户端(即通过JavaScript)调用的api?可能是我们可以向客户端发送加密id。。服务器将为将来的请求解密相同的内容。这不正确吗?因为我们只关心客户端不应该有任何ID模式,所以您可以像其他人一样保护API:访问控制。不要让随机的网络陌生人调用你的API。Https用户名/密码是最原始的,您需要选择适合您的机制。如果我没有错的话,只有从外部来源访问api时才能解决此问题。。不过,任何人都可以通过邮递员等摆弄这些东西。。。不这就是重点。您确实需要阅读有关身份验证/授权的基础知识。找一本好书或一本教程。这个网站是为非常具体的问题,你似乎错过了一个很好的概念的一部分。这还不错,但你需要仔细阅读。