2015-10-03 2 views
-1

У меня есть контроллер называется счет и действие под названием AddFunds()безопасности ASP.NET MVC при вызове действия непосредственно

В моем HttpGet Addfunds() действия возвращает вид привязку к ViewModel с ACCOUNTID свойство, поэтому по умолчанию представление содержит скрытое поле AccountId.

в действии HttpPost AddFunds(), я получил обновленный ViewModel, с тем же AccountID, как проходил методом HttpGet, с некоторыми другими параметрами, такими как количество и т.д.

Что я могу сделать чтобы человек не вызывал метод, напрямую передающий поддельный аккаунт?

Предотвращает ли токен AntiForgery? Любая другая мера, которую я должен взять?

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

Благодаря

+1

вместо описания кода, просто опубликовать его. – ataravati

+0

Короткий ответ: вам нужно сравнить пройденный идентификатор аккаунта с идентификатором учетной записи для аутентифицированного пользователя, прежде чем разрешить какие-либо изменения. Однако это довольно большая тема, и вы должны прочитать, как безопасность работает для вашего приложения asp.net mvc. Вот хороший старт http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute. aspx – Jasen

ответ

0

Первое - вы действительно должны избегать использования скрытых полей для данных/идентификаторов, которые собираются быть переданы к действию контроллера и представляют собой реальные и, возможно, важные данные.

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

Флаг анти-подделки используется для предотвращения атаки CSRF.

+0

Привет @Kamo, идентификатор в скрытых полях создается по умолчанию с помощью функций лесов. Как вам избежать этого? Какие у нас есть варианты? – IGIT

+0

@IGIT. Вы должны предоставить более подробную информацию об этой функции. – Kamo

0

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

Ваш URL будет: локальный: 3040/дом/редактировать AccountId = hkdshjlk89890-32 (encryptedid)

Или вы можете использовать base64 кодирования и декодирования (я не буду рекомендовать base64, потому как каждый один декодировать стоимость).

Другое решение, которое вы можете увидеть ниже ссылку Only allow access to action if redirected from specific action

Смежные вопросы