保护用于客户端处理的数据库密钥


Securing database keys for client-side processing

我有一个信息树,它以JSON对象的形式发送到客户端。在该对象中,我不希望拥有来自数据库的原始ID。我想过在对象(例如标题)或盐中对 id 和字段进行哈希处理,但我担心这可能会对处理开销产生严重影响。

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt');
在这种情况下,是否有

隐藏 ID 的标准做法?

我可以为您想到两个选项:

1) 您预先散列每个 id 并将其与原始 ID 一起存储在数据库中。这可能是也可能不是一个好主意,具体取决于您的数据库大小和大小约束。

2)自己写一个简单的哈希函数!如果你没有想法,我可以给你一些简单的东西。仅仅因为它简单并不意味着它不好,只要只有你知道它是如何工作的!我假设该函数没有在客户端进行散列。就个人而言,我更喜欢在服务器端代码端而不是数据库端管理处理函数(如哈希函数),因为我喜欢让 MySQL 尽可能自由,以尽可能小的延迟返回数据。

一个选项可能是使用 php 会话数据来存储发送到客户端的 id# 列表,以及哈希 id#s。

这意味着每次都会发送唯一的哈希值,下次加载时无法追踪。

哈希 ID 可以按照您的想法进行设置(在这种情况下,带有盐的 md5 可以工作,但任何简单的方法都可以)并将它们存储在会话中的数组中。

如果可能,请尽量避免在数据库中这样做。

您可以使用 md5(concat(id,'some salt')) 的值创建一个新列,并在进行 SELECT 语句之前对其进行计算,以节省计算开销。