我听说暴露数据库ID(例如在URL中)存在安全风险,但我无法理解原因。关于为何存在风险或为何不存在风险的任何意见或联系?编辑:当然访问是作用域的,例如,如果你看不到资源,foo?id=123你会得到一个错误页面。否则URL本身应该是秘密的。编辑:如果URL是秘密的,它可能包含生成有限的生成令牌,例如有效1小时,只能使用一次。编辑(几个月后):我目前的首选做法是使用UUIDS作为ID并公开它们。如果我使用序列号(通常用于某些DB上的性能)作为ID,我喜欢为每个条目生成一个UUID令牌作为备用键,并公开它。
3 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
在适当的条件下,暴露标识符不是安全风险。并且,在实践中,设计Web应用程序而不暴露标识符将是非常繁重的。
以下是一些要遵循的好规则:
使用基于角色的安全性来控制对操作的访问。如何完成这取决于您选择的平台和框架,但许多支持声明性安全模型,当操作需要某些权限时,该模型将自动将浏览器重定向到身份验证步骤。
使用编程安全性来控制对对象的访问。这在框架层面上更难做到。更常见的是,您必须在代码中写入内容,因此更容易出错。此检查不仅基于角色检查,还通过确保用户具有操作权限,还具有对要修改的特定对象的必要权限。在基于角色的系统中,很容易检查只有经理可以加薪,但除此之外,您需要确保员工属于特定经理的部门。
对于大多数数据库记录,条件1和2就足够了。但添加不可预测的ID可以被认为是一个额外的保险,或“深度安全”,如果你购买这个概念。但是,不可预测标识符是必需的一个地方是会话ID或其他身份验证令牌,其中ID本身对请求进行身份验证。这些应该由加密RNG生成。
添加回答
举报
0/150
提交
取消