2014-10-02 28 views
1

我有一个数据库,它有一个特定的表“Attribs”,其中包含用户的属性列表,如名称,地址,电话号码等,每个属性都是关键字。我使用REST API来获取属性名称并填充另一个表。但是,“Attribs”中的键正在暴露在API中。直接在API中使用数据库主键值是否安全

例如如果我试图把它的属性USER_NAME用户名,然后我的REST API将不得不像

“USER_NAME”一条线:“ABCD”

是可以安全地暴露这些密钥或可能造成任何可能的安全问题?

+0

这听起来很安全。我的意思是,只要这些主要关键值应该是保密的。但是你甚至不需要问。可以肯定的是,这里的安全目标是什么? – guest 2014-10-02 22:10:10

+0

API被许多人(直接或间接地)用来创建数据。该数据以key:value的形式发送,其中密钥来自“Attrib”并存储在其他表“用户”中。所以Attrib的关键是用户的列名。如果有人尝试侵入用户,那会泄漏大量敏感信息。所以我想知道该系统的设计是否提供了可以使黑客工作变得轻松的信息。 – Manali 2014-10-03 14:47:34

回答

2

我们没有足够的上下文,但没有,这是一种不安全的做法,OWASP中有关于它的整个部分。 https://www.owasp.org/index.php/Top_10_2010-A4-Insecure_Direct_Object_References这是一个原则,不要直接暴露ID,而是使用和间接层。

影响你的情况是不可评估与您提供的描述,但我会申请原则,如果我是你:)

+0

这主要是适当授权的问题。如果你的授权是完美无缺的,那么你用来引用一个对象的ID是否可预测并不重要。另一方面,授权不应只基于对ID的了解。 – Gumbo 2014-10-03 07:58:20

+0

你为什么这么说?如果auth是完美无瑕的,但你拥有100.000个用户,并且用户可以枚举应该仅由该用户看到的“ID”,那该怎么办?另一件事,数据库上的可靠ID与**其他问题**一起使用。比方说,有人找到一种写在数据库的表上的方法,但他无法阅读;直接暴露一个ID,就像他可以读取数据库一样,基本上在ID中写入另一行的内容。或者如果任何人需要数据库中的已知值来利用漏洞,他会知道存在任何这些ID。 – sc0p 2014-10-03 08:06:43

+0

如果有人试图破解数据库,那么使用表的已知列名称会更容易一些?有一个认证机制已经到位,但是再次API也可以用于认证,这意味着它暴露了“authentication_info”表中的列名。 – Manali 2014-10-03 14:54:36

相关问题