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

Security Web安全:不显示行ID的原因,security,web,relational-database,database-schema,Security,Web,Relational Database,Database Schema,问题。为所有用户显示数据库表行ID对安全性有害吗?若然,原因为何 背景。我正在考虑在我的应用程序url中使用数据库表行ID,如:www.mysite.com/product/45/tshirt_blue,其中45是行ID。我感觉这对安全性不好,但我一直想知道为什么?从数据库引用主键会带来一些问题,无论是在安全领域还是在可维护性领域 安全性:直接引用行id可以很容易地猜测其他产品,并可能绕过授权检查(AuthZ)。虽然您永远不应该依靠隐蔽性来保护系统,但这并不意味着您必须在整个web应用程序中留下

问题。为所有用户显示数据库表行ID对安全性有害吗?若然,原因为何


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

从数据库引用主键会带来一些问题,无论是在安全领域还是在可维护性领域

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


可维护性:如果您曾经计划有一个逻辑实体,“Blue Seahawks T恤”是同一个逻辑产品,但是不同的db条目,例如45->145,这将很难维护。该产品的所有链接现在都将被更改,书签和搜索引擎可能会被破坏,除非你总是映射45->145,然后再映射其他内容。拥有某种类型的中间ID,并将其映射到后台的相应DB条目,将允许您的链接保持一致。

这取决于-我认为所有产品都应该是公开的,因此没有安全问题。如果您需要某种访问控制,可能会出现问题。我认为访问部分不应该是一个问题。我将使用一个框架来处理这个部分。但显示ID可能会显示我在表中有多少行,这可能对黑客来说是有用的信息?答案显然取决于使用它的环境中显示的信息的敏感性。这同样适用于任何属性,无论它是否是标识符。