在发送到客户端之前,是否应该对表的Id列进行加密/哈希处理

Should the Id column of a table be encrypted/hashed before sending to client

本文关键字:Id 处理 哈希 加密 客户端 是否      更新时间:2023-09-26

我脑子里有这个问题。我想和你们分享一下,为自己找到一个合适的答案,并可能帮助其他人。

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

    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之类的缺陷。

问候,

您应该更好地将用户类型保持在会话中。

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

然后向用户显示id并没有任何方式来显示数据库列值,因为您的权限检查代码将通过重定向或提示用户不允许对其用户类型执行此类操作来克服这一问题。

还有一件事,如果您为id使用加密值,那么用户可以再次复制并使用您的加密值来达到他们的狡猾目的。

关于允许哪个用户编辑哪个记录,我将取决于服务器上的一组身份验证规则。在客户端中显示记录ID实际上是一个没有实际意义的问题。

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

这让我想到了解决这个问题的另一种方法——根本不要使用id。把它放在会议的手边,没有必要在表格中传递。这意味着你只能用你登录的id做事情,你可能永远不知道自己的id是什么

危险的是处理数据的脚本。即使作为一个初学者黑客,我也知道我可以更改这个ID,然后脚本可能更改他人的详细信息。

因此,你不应该使用id来知道要编辑哪个用户,您应该使用CookiesSessions