保护数据库密钥以进行客户端处理

时间:2012-04-15 16:58:39

标签: php mysql security

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

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt');

在这种情况下是否存在遮盖ID的标准做法?

3 个答案:

答案 0 :(得分:1)

我可以为您考虑两个选项:

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

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

答案 1 :(得分:1)

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

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

可以设置哈希id,但是你认为(在这种情况下,md5 with salt将起作用,但任何简单的事情都可以),并将它们存储在会话中的数组中。

尽可能避免在数据库中这样做。

答案 2 :(得分:0)

您可以创建一个值为md5(concat(id,'some salt'))的新列,并在生成select语句之前计算它以节省计算开销。