如何将表记录标识符传递给客户端

Posted

技术标签:

【中文标题】如何将表记录标识符传递给客户端【英文标题】:How to pass table record identifier to client side 【发布时间】:2012-10-16 11:01:30 【问题描述】:

在 CRUD 环境中,假设我们正在显示用户的联系人列表。网站需要为用户提供“编辑”和“删除”功能。每个联系人代表数据库表中的一条记录,记录的标识符必须传递给浏览器(客户端)。

在我的应用程序中,我通常在表中有一个自动增量标识符字段,并将其值传递给浏览器。因此,当用户想要编辑或删除时,我会连同该标识符一起向服务器发送请求。这样我就可以在表格中找到记录了。

但我担心安全和隐私。通常我不允许任何其他用户访问其他人的记录(Duh),但仍然不喜欢只将整数传递给浏览器。

AFAIK,大公司正在提供一个长的唯一标识符,如 40F0C923BACECBF40C4CAA465D0E4DB0 来执行此操作,但这次我需要在每次创建新记录之前检查是否使用了该值。

我不知道在哪里向数据库部分或这里问这个问题,只是在这里问。 你们是如何做到这一点的?或者换句话说,它是如何专业地完成的?

【问题讨论】:

【参考方案1】:

听起来像是 OWASP 前 10 名违规。特别是Insecure Direct Object Reference。每个数据库记录都需要有一个所有权 ID。这样您就可以将用户的 id 存储在会话状态中,并确保用户正在访问属于他们的记录。

【讨论】:

我已经这样做了。在对数据库做任何事情之前,首先要检查所有权。但我想知道的是,如果只将记录标识符整数传递给浏览器是一种专业技术吗?

以上是关于如何将表记录标识符传递给客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何动态地将表名传递给 PL SQL 游标?

如何将表行传递给 plpgsql 函数?

在 MVC 5 中,如何将表对象数据作为列表传递给控制器​​视图模型?

SQL Server - 将表传递给函数......如何?这是个好主意吗?

如何在将请求传递给上游服务器之前删除 Nginx 中的客户端标头?

如何将表作为参数传递并使用 plsql 过程填充该表