加密记录id


encrypting ids of records

在这个网站我们有id s为categories。这就是primary key/categories表。它们是顺序的和自动增量的。

这个id作为隐藏字段,会话值等在站点周围传递。在后台,每当一个表单被提交,或者一些数据库更新完成等,id被验证,以确保它没有被篡改。

$id = $this->getPostField(cat_id);
$id = validate($id); //perform checks on the id field 

我可以加密/解密id,这样即使任何人看到隐藏字段,他也无法真正理解它的价值。然而,我的问题是——这真的有必要吗?还是我只是增加了一层复杂性,只增加了开销,没有太多的附加值?

$id = $this->getPostField(cat_id);
$id = validate(keyDecrypt($id)); //perform checks on the decrypted id field

我想为什么我问这个是因为id不是一个非常敏感的数据,如信用卡或社会安全号码。如果用户读取隐藏字段,是否能看到它并不重要。只要我在后端验证它,我假设我应该很好(?)

您也可以为每个类别添加惟一标识,并检查id + uniqid是否链接到某个类别。这个唯一性甚至可以是段塞,例如

但它看起来像是一个开销,如果有人真的不想改变客户端,它仍然是可能的。只要你检查服务器端,就没问题。当你在会话中保存它时,它非常快速和简单。

正如上面在评论中所说,它是通过模糊实现的安全性,如果攻击者真的不想保护您,它不会保护您很长时间。

这取决于你看看是否有价值使用id,另一个字段,或加密它…(您也可以散列它,因为id存储在会话中:-))

我不认为这种安全性是通过模糊实现的。

如果有人看到隐藏字段,他无法真正理解它的价值。

一开始就没有太多需要理解的。id本身没有任何有用的信息,它只是引用了一个特定的记录。

然而,由于它是一个自动递增的整数,它暴露了诸如有多少个类别之类的信息。用密钥加密id使元信息保密,并且它使用一个定义良好的秘密:加密密钥。这并不是通过模糊实现安全,因为即使人们知道确切的方案,如果没有密钥,他们仍然无法计算出类别数。