我正在构建一个简单的 CRUD 应用程序(不使用 CRUD 模块)。
我的模型是一个具有一个属性的简单类。id 隐式继承自 Model。
@Entity
public class Account extends Model {
@Required
public String domain;
}
观点如下。请注意带有 id 的隐藏字段。
<form class="form-horizontal" action="@{Application.save}" method="POST">
<fieldset>
<legend>Settings</legend>
<input type="hidden" name="account.id" value="${account?.id}">
#{field 'account.domain'}
<div class="control-group #{if field.error != null} error #{/if}">
<label class="control-label" for="${field.id}">&{field.name}</label>
<div class="controls">
<input type="text" class="input-xlarge" id="${field.id}" value="${field.value}" name="${field.name}">
<span class="help-inline">${field.error}</span>
</div>
</div>
#{/field}
<div class="form-actions">
<input class="btn btn-primary" type="submit" value="Save">
</div>
</fieldset>
我已经能够构建一个保存、更新工作的场景。
完成更新的方式是我从隐藏字段中读取 ID,并更新记录。如果 ID 不可用,则会创建一条新记录。
所以问题是: ID 是否可以被破解,即修改,以便我将 1 更改为 2,并假设存在 2 的记录,它会被覆盖。(我想使用 firebug 或其他插件应该不难)。
我该如何防止这种情况?我想到的一个选项是读取具有给定 ID 的记录,如果允许用户修改它,我允许更新,否则不允许。这仍然不是万无一失的,因为虽然可以允许用户,但可以修改“错误”记录。
我想这是一个已知问题,希望有一个已知的解决方案。
感谢您花时间回答我的问题。