Целостность скрытых полей: Asp.NET MVC
Мы использовали asp.net mvc для разработки. Иногда нам нужно поместить в форму некоторые скрытые поля, которые помещаются в модель привязкой модели (как и ожидалось). В настоящее время пользователи могут легко изменять форму, используя firebug или другие утилиты. Цель скрытого поля состоит в том, чтобы предоставить некоторую информацию обратно на сервер как есть, и они не предназначены для изменения.
Например, в моей форме редактирования сотрудника я могу указать EmployeeID в скрытом поле, но если пользователь изменит employeeID в скрытом поле, неправильный сотрудник будет обновлен в базе данных. в этом сценарии, как мы можем сохранить целостность скрытых полей.
3 ответа
Вам необходимо обеспечить безопасность, чтобы убедиться, что лицо, выполняющее изменение, имеет разрешение на это. Я бы также поместил идентификатор в URL, а не в скрытое поле, полагаясь на безопасность, чтобы гарантировать, что люди не будут изменять вещи, которые они не должны иметь. Если у них есть разрешение на изменение элемента при изменении идентификатора вручную, это не должно быть проблемой. Важно убедиться, что человек не может изменить идентификатор вручную и получить доступ к тому, что он не должен. Применение разрешений на стороне сервера решает эту проблему. Вы можете легко сделать это, используя роли в сочетании с AuthorizeAttribute.
если пользователь изменяет идентификатор сотрудника в скрытом поле, неправильный сотрудник будет обновлен в базе данных
Это серьезная дыра в безопасности вашего сайта. Во всем, что вы делаете с веб-разработкой, независимо от того, насколько умным может быть чей-то код или насколько вы думаете, все будет в порядке, пока пользователи ничего не делают, помните одно золотое правило: никогда не доверяйте данным, полученным от клиента.
Чтобы что-то изменить на вашем сайте, пользователь должен войти в систему. (Верно?). Таким образом, при любой попытке пользователя опубликовать на сайте форму (особенно такую, которая может изменять данные), дважды проверьте, что пользователь, отправляющий форма имеет разрешение на выполнение запрашиваемого действия с указанными данными.
В идеале каждое действие, которое не является полностью открытым и незащищенным, должно иметь проверку разрешений на стороне сервера. Никогда, никогда не доверяй тому, что посылает тебе клиент.
Одна потенциальная альтернатива - хранить эту статическую одноразовую информацию в TempData на сервере и не передавать ее клиенту, где она может быть подделана. Имейте в виду, что по умолчанию TempData использует Session и имеет собственные ограничения - но это может быть вариантом.