加密记录的ID

时间:2014-07-01 12:13:49

标签: php security encryption uniqueidentifier

在此网站中,我们idcategories。这些基本上是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不是一个非常敏感的数据,如信用卡或社交密码。如果用户读取隐藏字段,用户可以看到它并不重要。只要我在后端验证它,我假设我应该没事(?)

2 个答案:

答案 0 :(得分:1)

您也可以为每个类别添加uniqid,并检查id + uniqid是否与某个类别相关联。这个uniqid甚至可以是slug,例如

但它似乎是一个开销,如果有人真的不想改变客户端的东西,它仍然是可能的。只要你检查服务器端,这很好。当你在会话中保存它时,它非常快速和简单。

正如上面的评论所说,它是通过默默无闻的安全,如果攻击者真的不愿意,它将无法长时间保护你。

由您决定使用id,另一个字段或加密它是否有价值...(您也可以将其哈希,因为ID存储在会话中: - ))

答案 1 :(得分:0)

我不透明地认为这种安全。

  

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

首先要了解的内容并不多。 id本身没有任何有用的信息,只是指特定的记录。

但是,由于它是一个自动增量整数,它会公开信息,例如有多少类别。使用密钥加密id使得该元信息保密,并且使用明确定义的秘密:加密密钥。这不是通过默默无闻的安全性,因为即使人们知道确切的方案,他们仍然无法在没有钥匙的情况下弄清楚类别计数。