为了账号安全,请及时绑定邮箱和手机立即绑定

公开数据库ID - 安全风险?

/ 猿问

公开数据库ID - 安全风险?

至尊宝的传说 2019-09-19 15:13:24

我听说暴露数据库ID(例如在URL中)存在安全风险,但我无法理解原因。

关于为何存在风险或为何不存在风险的任何意见或联系?

编辑:当然访问是作用域的,例如,如果你看不到资源,foo?id=123你会得到一个错误页面。否则URL本身应该是秘密的。

编辑:如果URL是秘密的,它可能包含生成有限的生成令牌,例如有效1小时,只能使用一次。

编辑(几个月后):我目前的首选做法是使用UUIDS作为ID并公开它们。如果我使用序列号(通常用于某些DB上的性能)作为ID,我喜欢为每个条目生成一个UUID令牌作为备用键,并公开它。


查看完整描述

3 回答

?
慕哥6287543

在适当的条件下,暴露标识符不是安全风险。并且,在实践中,设计Web应用程序而不暴露标识符将是非常繁重的。

以下是一些要遵循的好规则:

  1. 使用基于角色的安全性来控制对操作的访问。如何完成这取决于您选择的平台和框架,但许多支持声明性安全模型,当操作需要某些权限时,该模型将自动将浏览器重定向到身份验证步骤。

  2. 使用编程安全性来控制对对象的访问。这在框架层面上更难做到。更常见的是,您必须在代码中写入内容,因此更容易出错。此检查不仅基于角色检查,还通过确保用户具有操作权限,还具有对要修改的特定对象的必要权限。在基于角色的系统中,很容易检查只有经理可以加薪,但除此之外,您需要确保员工属于特定经理的部门。

  3. 对于大多数数据库记录,条件1和2就足够了。但添加不可预测的ID可以被认为是一个额外的保险,或“深度安全”,如果你购买这个概念。但是,不可预测标识符是必需的一个地方是会话ID或其他身份验证令牌,其中ID本身对请求进行身份验证。这些应该由加密RNG生成。


查看完整回答
反对 回复 2019-09-19
?
慕码人8056858

这取决于ID代表什么。


考虑一个网站,出于竞争原因,不希望公开他们拥有多少成员,但通过使用顺序ID,无论如何都会在URL中显示它:http://some.domain.name/user? id = 3933


另一方面,如果他们使用用户的登录名:http://some.domain.name/user?id = some,他们没有透露任何用户不知道的内容。


查看完整回答
反对 回复 2019-09-19
?
茅侃侃

虽然不是数据安全风险,但这绝对是商业智能安全风险,因为它暴露了数据大小和速度。我已经看到企业因此而受到伤害,并且已经深入了解了这种反模式。除非你只是在建立一个实验而不是一个企业,否则我强烈建议让你的私人信息不受公众的注意。https://medium.com/lightrail/prevent-business-intelligence-leaks-by-using-uuids-instead-of-database-ids-on-urls-and-in-apis-17f15669fd2e


查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信