在发送到客户端之前,是否应对表的Id列进行加密/散列

时间:2012-02-27 19:34:06

标签: php javascript ruby-on-rails ajax database

我心中有这个问题。 我想与你的伙伴们分享一下,为自己找一个合适的答案,并可以帮助那些人。

因此,为了论证,我们假设我们的网站有一个用户表,其中包含以下列:

    id, name, email and password

很多时候我们必须在客户端使用id字段。 说我们已经实施了AJAX以允许用户编辑他们的个人资料。 在配置文件编辑页面上看起来像这样:

<div>
    <div>
         <label>Name: <input type = "text" name = "txtName" id = "txtName"/></label>
    </div>
    <div>
         <label>Email: <input type = "text" name = "txtEmail" id = "txtEmail"/></label>
    </div>
    <div>
         <label>Password: <input type = "password" name = "txtPasswd" id = "txtPasswd"/></label>
    </div>
    <div>
         <input type = "submit" name = "updateProfile" value = "Save" />
         <input type = "hidden" name = "id" value = "1" />
    </div>
</div>

请关注这个问题,而不是指出表格设计,html或css内容可能产生的缺陷。

此致

4 个答案:

答案 0 :(得分:1)

我将依赖服务器上的一组身份验证规则来确定允许哪个用户编辑哪条记录。在客户端显示记录ID实际上是一个没有实际意义的点。

答案 1 :(得分:1)

我认为您不需要加密用户ID,但您应该检查其他数据。一个好主意是在更改新密码之前验证用户的旧密码。这可以防止那些偶然发现开户的人改变它。另一个好的做法是验证用户是否已登录(例如,使用会话),并确保id与登录用户的id匹配。

这让我想到了另一个解决这个问题的方法 - 根本不要使用id。在会话中保持方便,不需要在表单中传递它。这意味着您只能使用您登录的ID进行操作,并且您可能永远不知道自己的ID是什么。

答案 2 :(得分:1)

您最好将用户类型保持在会话中。

按用户类型,我的意思是您必须根据用户类型检查访问/编辑/更新/查看权限。

然后向用户显示ID没有任何方法可以显示您的数据库列值,因为您的权限检查代码将通过重定向或提示用户不允许此类操作进入其用户类型来克服。

如果你对id使用加密值,还有一件事情,那么用户只需复制并使用你的加密值就可以实现偷偷摸摸的目的。

答案 3 :(得分:0)

危险的是在处理数据的脚本中。 即使作为初学者黑客,我知道我可以更改此ID,然后脚本可能会 改变某人的其他细节。

因此,你不应该使用id来了解要编辑的用户, 您应该使用CookiesSessions