【问题标题】:Prevent user from changing id before update in WebApps防止用户在 WebApps 中更新之前更改 id
【发布时间】:2014-11-19 02:44:34
【问题描述】:

这是一个普遍的问题。

我对 CRUD 操作中的 ID 和其他必须发送 ID 的操作有疑问。

我的意思是,无论使用什么技术,结果都将是一个 html 表单,其中 Id 将位于表单内的输入字段中(可能被滥用、隐藏,但始终存在)。考虑到这种方式,用户可以使用 firebug(例如)修改 entityId 并使用不同的 id 发送表单,这将允许用户更新甚至删除不是原始请求的记录。

<form>
    <input id="entityId" type="hidden"/>
    <input  id="someName" type="button"/>
</form>

我该如何处理这种情况? 我尝试的第一个解决方案是通过 userId 和 entityId 进行选择,因此我可以允许用户仅更新他自己的记录,但他仍然可以更改 id 并更改他拥有的其他记录。

如何限制更多用户仅在 Web 应用程序显示的记录中进行更改?

提前致谢

【问题讨论】:

  • 也许从您的 servlet 方面,在会话变量中为用户设置当前 entityid 并检查它们是否匹配。
  • 您需要检查提交的值是否有效并且他们有修改它们的权限
  • @AndrewBarber 我猜 OP 知道这一点并询问如何
  • @ScaryWombat Wombat 你是对的。这个想法是如何。不确定将其存储在会话中是否是一个好主意,如果我有一个包含 100 条记录的网格并且我可以编辑所有记录,如果我将所有记录存储在会话中,它可能会导致内存问题。跨度>

标签: java security design-patterns crud


【解决方案1】:

听起来您不应该将记录ID写入Web表单,而是将其保存在服务器上的用户会话中。

使用

request.getSession().setAttribute(name, value);

设置它,并且

request.getSession().getAttribute(name);

阅读它。

这样就不会被篡改了。

如果您需要在一个会话中允许多个表单(和记录),您可以在附加到会话的集合中跟踪它们。

【讨论】:

  • 这是一个普遍的问题,如果后端是一个REST Web服务呢?如果我不发送用户名,如果名称不是唯一的,我该怎么办?
猜你喜欢
  • 1970-01-01
  • 2013-03-19
  • 2020-06-15
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2015-03-26
相关资源
最近更新 更多