公开数据库ID - 安全风险? [英] Exposing database IDs - security risk?

查看:101
本文介绍了公开数据库ID - 安全风险?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我听说过暴露资料库编号(例如网址)是一种安全风险,但我无法了解原因。

I've heard that exposing database IDs (in URLs, for example) is a security risk, but I'm having trouble understanding why.

任何意见或链接,为什么它是一个风险,或为什么它不是?

Any opinions or links on why it's a risk, or why it isn't?

编辑:当然访问范围,例如如果你看不到资源 foo?id = 123 ,你会得到一个错误页面。

of course the access is scoped, e.g. if you can't see resource foo?id=123 you'll get an error page. Otherwise the URL itself should be secret.

编辑:如果网址是机密的,则可能包含生成的令牌,例如生成的令牌。有效期为1小时,只能使用一次。

if the URL is secret, it will probably contain a generated token that has a limited lifetime, e.g. valid for 1 hour and can only be used once.

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

EDIT (months later): my current preferred practice for this is to use UUIDS for IDs and expose them. If I'm using sequential numbers (usually for performance on some DBs) as IDs I like generating a UUID token for each entry as an alternate key, and expose that.

推荐答案

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

Given the proper conditions, exposing identifiers is not a security risk. And, in practice, it would be extremely burdensome to design a web application without exposing identifiers.

这里有一些很好的规则:

Here are some good rules to follow:


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

  2. 使用程序化安全性以控制对对象的访问。这在框架级别更难做。更多的时候,它是你必须写入你的代码,因此更容易出错。此检查超出了基于角色的检查,不仅确保用户具有操作的权限,还具有对正在修改的特定对象的必要权限。在基于角色的系统中,很容易检查只有经理可以提出,但是除此之外,还需要确保员工属于特定经理的部门。

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

这篇关于公开数据库ID - 安全风险?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆