在此网站中,我们id
为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不是一个非常敏感的数据,如信用卡或社交密码。如果用户读取隐藏字段,用户可以看到它并不重要。只要我在后端验证它,我假设我应该没事(?)
答案 0 :(得分:1)
您也可以为每个类别添加uniqid,并检查id + uniqid
是否与某个类别相关联。这个uniqid甚至可以是slug,例如
但它似乎是一个开销,如果有人真的不想改变客户端的东西,它仍然是可能的。只要你检查服务器端,这很好。当你在会话中保存它时,它非常快速和简单。
正如上面的评论所说,它是通过默默无闻的安全,如果攻击者真的不愿意,它将无法长时间保护你。
由您决定使用id
,另一个字段或加密它是否有价值...(您也可以将其哈希,因为ID存储在会话中: - ))
答案 1 :(得分:0)
我不透明地认为这种安全。
如果有人看到隐藏的字段,他就无法真正理解它的价值。
首先要了解的内容并不多。 id
本身没有任何有用的信息,只是指特定的记录。
但是,由于它是一个自动增量整数,它会公开信息,例如有多少类别。使用密钥加密id
使得该元信息保密,并且使用明确定义的秘密:加密密钥。这不是通过默默无闻的安全性,因为即使人们知道确切的方案,他们仍然无法在没有钥匙的情况下弄清楚类别计数。