Web 安全:不显示行 ID 的原因

Web security: reasons to not display row ID

问题。为所有用户显示数据库 table 行 ID 对安全性不利吗?如果是,为什么?

背景。我正在考虑在我的应用程序 url 中使用数据库 table 行 ID,如下所示:www.mysite.com/product/45/tshirt_blue,其中 45 是行 ID。我感觉这不利于安全,但我一直想知道为什么?

从数据库中引用主键会在安全领域和可维护性领域带来一些问题。

安全性:直接引用您的行 ID 可以很容易地猜测其他产品,并可能绕过授权检查 (AuthZ)。虽然您永远不应该依靠默默无闻的安全性来保护系统,但这并不意味着您必须在整个 Web 应用程序中留下对 AuthZ 控件进行回归测试的说明。

可维护性:如果您打算拥有一个逻辑实体,"Blue Seahawks T-shirt" 是相同的逻辑产品,但数据库条目不同,例如 45 -> 145,这将很难维护。该产品的所有链接现在都将被更改,书签和可能的搜索引擎将被破坏,除非您总是映射 45 -> 145,然后在路上进行其他操作。在后台将某种中间 ID 映射到相应的数据库条目将使您的链接保持一致。