Как игнорировать привязку модели из строки запроса в MVC - PullRequest
2 голосов
/ 16 ноября 2010

Я отправляю форму, отправляя сообщение обратно.Действие контроллера принимает значения в качестве параметров.Например: EditProduct (int productid, строка productname).

productid предоставляется из формы в скрытом поле.Как я могу гарантировать, что пользователь не будет вызывать это действие и передавать этот productid и name как queystring, а привязка модели будет связывать значения и продукт сохраняется в базе данных?

Ответы [ 4 ]

3 голосов
/ 16 ноября 2010

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

Если вы хотите заставить пользователей перейти на вашу веб-страницу для выполнения публикации, выможно использовать Html.AntiForgeryToekn () .Тем не менее, пользователь все еще может посетить веб-сайт, просмотреть маркер защиты от подделки и передать его вместе со своим запросом.

1 голос
/ 16 ноября 2010

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

Попытка запретить пользователям изменять строку запроса не поможет .

1 голос
/ 16 ноября 2010

Вы можете подписать идентификатор продукта секретным ключом на своем сервере (используя HMACSHA512), а затем проверить подпись в обратной передаче.

Возможно, вы захотите включить в подпись текущую дату и / или идентификатор пользователя или сеанса, чтобы предотвратить атаки повторного воспроизведения.

0 голосов
/ 16 ноября 2010

Я бы посоветовал вам добавить в вашу модель столбец версии строк (timestamp). Это намного проще (если вы можете вносить изменения в модель), чем подписывать или хэшировать.

...