Обнаружить, что скрытое поле формы изменилось? - PullRequest
2 голосов
/ 27 сентября 2011

Я использую скрытое поле формы для хранения текущей записи, которую редактирует пользователь.Как я могу предотвратить изменение пользователем этого поля?Сработают ли помощники по борьбе с подделкой в ​​MVC3, или мне нужно сдать свои чеки?

Ответы [ 4 ]

0 голосов
/ 27 сентября 2011

Вместо того, чтобы пытаться проверить, изменил ли пользователь что-либо, вам следует убедиться, что ему разрешено редактировать все записи, указанные в представленном идентификаторе.

Если им разрешено редактировать указанный идентификатор, дайте им это сделать. Если нет, не надо. Даже не беспокойтесь о том, изменили ли они данные формы, что тривиально.

Токены против подделки на самом деле не служат никакой цели, кстати.

0 голосов
/ 27 сентября 2011

Для предотвращения CSRF-атак вы можете использовать вспомогательный метод Html.AntiForgeryToken в разделе формы

0 голосов
/ 27 сентября 2011

Редактировать

Кажется, я неправильно понял ваш вопрос, извините. Действительно, AntiForgeryToken не поможет вам предотвратить это. Вы можете сохранить эту нередактируемую информацию в своей модели (в моем примере в классе Account), не раскрывая ее или в своем сеансе. Вы также можете добавить некоторые проверки / события в свойствах вашей модели, чтобы обнаружить нежелательное издание.

Old-misunterstood-ответ

Вы можете использовать метод HtmlHelper HtmlHelper.AntiForgeryToken

1 / В вашей форме:

@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        //Your other fields

        <p>
            @Html.AntiForgeryToken()
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

2 / В вашем сообщении метод действия:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Models.Account account)

Обратите внимание, что AntiForgeryToken работает только с запросом POST и что куки (очевидно) должны быть включены:).

0 голосов
/ 27 сентября 2011

См. Как определить, изменилось ли поле формы, без использования скрытого поля

Предложения использовать хеш и сравнивать при обратной передаче, чтобы проверить, были ли внесены изменения.

...