如何模糊db中2个用户之间的关系?

问题描述 投票:1回答:1

我在我的SQL表中存储2个用户之间的相互友谊。一排看起来像

friendship_id | user_id_1 | user_id_2

(为简单起见,我选择了存储

friendship_id | user_id_2 | user_id_1

以及)

我的问题是:如果发生泄漏,黑客就会拥有这个表,并将user_id与电子邮件地址和其他用户数据相关联的表格,使他能够将名字放在友谊上。我真的想避免:我不希望任何人知道谁是谁的朋友。所以我想加密/散列/混淆/匿名化此表中的user_id(以防止泄漏时无用)。

我在想类似的东西

friendship_id | hashed_user_id_1 | hashed_user_id_2

我的理由是正确的吗?如果是这样,那么实施该方法的正确方法是什么? (我正在使用PHP)。

我在考虑使用password_hash函数,但我不确定在使用password_verify时我的SQL查询会是什么样子。

或者也许使用sha256 +独特盐的几次迭代就足够了?但是,这是否意味着我必须为每个友谊生成并储存一种独特的盐?

encryption hash privacy
1个回答
0
投票

我认为您的方法不会解决任何问题,因为黑客可以使用散列值来查找用户。

我的建议:尽量保留客户端的所有plaint关系数据。

这意味着什么?这意味着如果攻击者访问服务器,他就无法从关系中获取用户。这意味着代码将更复杂,但更安全。

你是如何实现的?

这只是我的头脑,所以人们需要更多分析。但这是一个快速的解决方案:

1 - 从用户传递创建密钥:这可以通过基于PKCS5密码的密钥生成来完成。让我们说关键是K。 2 - 加密用户关系在客户端使用K(例如使用javascript)。然后将friendship_id添加到您的数据中。你会得到这样的数据:

DATA = friendship_id || ENC(user_id_2 || user_id_1 || random_nounce, K)

3 - 在服务器SQL上保存DATA,所以无论何时你需要获得友谊,你都可以找到DATAfriendship_id。 4 - 每当用户想要查看朋友列表时,他只会在客户端解密DATA并且会有他朋友用户ID的列表。现在,他将发送单独的请求以获取这些用户ID的信息。

使用这种方法,由于朋友用户id在服务器上被加密,黑客无法看到它们。

如果您在客户端不需要任何内容​​,则可以使用存储过程实现某些功能。存储朋友用户ID在服务器上加密,并使用存储过程通过从客户端传递friendship_idK来获取它们。

© www.soinside.com 2019 - 2024. All rights reserved.