Как предотвратить взлом скрытых полей с идентификатором

Я создаю простое приложение CRUD (без использования модуля CRUD).

Моя модель представляет собой простой класс с одним атрибутом. идентификатор неявно наследуется от 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>

Мне удалось создать сценарий, в котором работает сохранение и обновление.

Способ обновления: я считываю идентификатор из скрытого поля и обновляю запись. Если идентификатор недоступен, создается новая запись.

Итак, вопрос: Можно ли взломать идентификатор, т.е. изменить его так, чтобы я изменил 1 на 2, и если запись с 2 существует, она будет перезаписана. (Я полагаю, это не должно быть сложно с firebug или другими плагинами).

Как предотвратить это? Один из вариантов, о котором я подумал, - прочитать запись с заданным идентификатором, если пользователю разрешено ее изменять, я разрешаю обновление, в противном случае - нет. Это все еще не защита от дурака, потому что, хотя пользователю может быть разрешено, «неправильная» запись может быть изменена.

Я полагаю, что это известная проблема и, надеюсь, с известным решением.

Спасибо, что нашли время ответить на мой вопрос.

7
задан msung 1 June 2012 в 12:29
поделиться