到目前为止,在我的MVC应用程序中,每次我想要获取资源时,都会将数据库ID包含在URI中。避免Uris上的数据库信息
例:想象一下,对我们的产品的应用,这些产品中的一个具有ID 1,我可以访问的URI products/1
产品的细节。然而,这可能是一个问题,想象的ID可以更改。即使您认为id是主键并且不会更改,用户仍然可以获得有关1实际上是产品id的知识,并且该参数用于访问数据库。这可能会出现安全问题吗? 尽管如此,uri和数据库结构之间仍存在依赖关系。
(How)我可以创建一个不依赖于数据库并仍然可以访问该资源的uri吗?
'用户仍然可以获得知识':我不认为这是一个问题,因为用户无法用产品'id'做任何事情。 –
IMOHO,如果可以*以恶意的方式使用密钥,这只是一个“坏”的事情。例如,将ID用于未受保护的“帐户评论”URI将是非常糟糕的,例如,在哪里可以“猜测”接入点应该限制的信息。然而,正如SO所示,暴露一个ID(问题ID)和一个“漂亮”的标识符本身并没有什么错。 – user2864740
另外,就URI的有效性而言,如果自动增量ID密钥更改,GUID密钥更改或者代理密钥更改,则没有差别 - 如果将密钥嵌入到其中,则仍然会导致先前的URL无效查找特定信息的URL。 – user2864740