在发送到客户端之前,是否应该对表的Id列进行加密/哈希处理
Should the Id column of a table be encrypted/hashed before sending to client
我脑子里有这个问题。我想和你们分享一下,为自己找到一个合适的答案,并可能帮助其他人。
因此,为了论证起见,我们假设我们的网站有一个用户表,其中包含以下列:
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来知道要编辑哪个用户,您应该使用Cookies
或Sessions
- Redux处理新项目和id
- 如何在使用$(“#id”).off()后启用事件处理程序;
- 通过Couchdb中的更新处理程序添加id和author字段
- Jquery处理ID中的特殊字符
- 可以't将事件处理程序添加到ID为的按钮中
- 将文本框中用逗号分隔的员工ID拆分为数组,然后处理这些字符串
- 如何在 javascript 中处理具有动态 ID 的事件
- 在不同的对象上应用相同的 id 并分别对它们进行动画处理 (jQuery)
- 在jQuery点击处理程序中获取选择器父ID
- 在 jquery 中处理多个 ID
- 处理重复表单字段集 (regex) 中数组 ID 的递增数
- Jquery不处理带有ID选择器的匿名函数调用
- CouchDB更新处理程序:文档id不能为空
- 使用数据表处理列ID
- 将元素ID传递到数组中以进行POST表单处理
- 在发送到客户端之前,是否应该对表的Id列进行加密/哈希处理
- 使用数字id javascript处理html输入元素
- 如何使用不同的选择器 ID 多次处理事件
- 如何用类选择器覆盖id选择器的jQuery事件处理程序
- 西西弗能处理ID显示的页面吗