网络应用:在隐藏字段中存储ID是否安全?

时间:2010-08-05 12:59:20

标签: php web-applications authorization

我只是想到了这个想法,但我不知道我是否很慢。

通常,我将我正在编辑的项目的ID存储在隐藏字段中。然后在后端(我使用PHP / Zend Framework btw),我得到它来确定哪个项目被编辑。但后来我想,更安全的东西,例如。编辑个人资料,用户可以以某种方式编辑隐藏的字段吗?然后他可以编辑其他人的个人资料。我知道对于编辑配置文件,我可以从会话变量中获取id,但是如果我得到的东西需要我将id存储在某个地方呢?

我得到了ACL(Zend_Acl)我这样做了。基本上从请求参数中获取id

$id = $req->getParam('id');

然后检查是否允许登录用户编辑该项目。但问题是我想知道网址是否类似/users/edit/1,其中1是id。但不知何故,隐藏字段更改为2,请求参数是什么?

你会怎么处理这个?

5 个答案:

答案 0 :(得分:10)

您必须在客户端存储某种ID - 否则您如何知道要编辑的项目? 这并不能使您免于检查当前用户有权编辑/查看已编辑项目的服务器上的强制性。 除此之外,你为什么要关心他如何编辑项目(无论是通过合法使用网络工具,还是编辑隐藏/任何字段)。

答案 1 :(得分:1)

将ID存储在隐藏值中并不十分安全。通常,我们将ID存储在会话变量中。

答案 2 :(得分:1)

正如ppshein所说,将敏感的id存储在隐藏的var中是不安全的。你会在隐藏的var中存储密码吗?即使是新手黑客也很容易获得这些数据。

您需要确保服务器强制执行所有访问控制。

在您的情况下,您需要确保登录的用户(会话中的用户)是正在编辑的配置文件的所有者。或者,正在进行编辑的用户有权编辑该个人资料(例如是管理员)

答案 3 :(得分:0)

它不应基于用户提交的任何内容。 您应该始终检查服务器端的用户权限。 攻击者可以为您的服务器准备任何请求。

答案 4 :(得分:0)

同意上述所有要点,但如果您确实需要以任何理由存储客户端内容,您可以随时加密数据并在需要使用时解密但是再次使用会话将是处理的最佳方式因为他们无法访问客户端。