ASP.NET MVC 2 EditModel включает Id?Идентификатор защиты не подделан - PullRequest
3 голосов
/ 06 сентября 2010

Я ищу некоторые рекомендации по созданию EditMoels и обновлению данных в приложении ASP.NET MVC. Допустим, у меня есть такой URL / Post / Edit? Id = 25

Я гарантирую, что у пользователя есть права на редактирование определенного сообщения по Id в запросе Get и то же самое для моего сообщения в контроллере. Я использую ValidateAntiForgeryToken.

Вопросы: Должен ли я включить свойство Id в мою модель редактирования? Если так, я должен зашифровать это?

Проблема в том, что я могу использовать FireBug для редактирования ввода идентификатора hiddedinput и редактирования другого поста, если у меня есть разрешение на это. Это не ужасно, но кажется неправильным.

Любая помощь будет отличной!

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Есть несколько способов предотвратить это.

Первый - вообще не отправлять конфиденциальные данные клиенту. Сохраняйте идентификатор сообщения в переменных сеанса, чтобы пользователь никогда не мог его редактировать. Это может или не может быть вариантом в зависимости от вашей архитектуры.

Следующий подход заключается в преобразовании прямой ссылки в косвенную. Например, вместо отправки postids = {23452, 57232, 91031} клиенту для отображения выпадающего списка, вы должны отправить непрозрачный список {1,2,3}. Один сервер знает, что 1 означает 23452, 2 означает 57232 и так далее. Таким образом, пользователь не может изменить любой параметр, который вы не хотите, чтобы он.

Последний подход включает в себя какое-то хэш-значение, которое добавляется в качестве проверки целостности. Например, предположим, у вас есть 3 скрытых поля на html-странице - {userId = 13223, postId = 923, role = author}. Сначала вы сортируете имена полей, а затем объединяете значения, чтобы получить строку типа postId=923&userId=13223&role=author. Затем добавьте к этой строке секрет сервера и хешируйте (SHA-1 или MD5) всю строку. Например, SHA-1('postId=923&userId=13223&role=author&MySuperSecretKey'). Наконец добавьте это хешированное значение как скрытый параметр. Вы также можете добавить еще одно скрытое поле с именем ProtectedParameters=userId,postId,role.

Когда будет сделан следующий запрос, повторите весь процесс. Если хеш отличается, заблокируйте процесс.

Мудро, я перечислил опции в порядке убывания. В то же время, это, вероятно, в порядке возрастания удобства. Вы должны выбрать правильный микс для своего приложения.

0 голосов
/ 06 сентября 2010

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

Если вы не можете ограничить пользователей, не позволяйте им ничего редактировать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...