2013-07-06 3 views
1

Если я помещаю скрытое поле Id в форму html, чтобы использовать его для поиска пользователя, которого я хочу отредактировать, я могу изменить это значение с помощью инспектора браузера и когда я отправлю в форме он изменит неправильный пользователь.Как защитить форму от ручной смены

Как защитить такую ​​вещь?

+1

Если пользователь может изменить объект, на который у него нет прав на изменение, тогда у вас есть серьезная проблема безопасности, которая важнее, чем беспокоиться о том, чтобы остановить кого-либо, изменяющего скрытое значение. –

+0

Возможный дубликат http://stackoverflow.com/questions/2632626/how-to-detect-hidden-field-tampering –

ответ

1
  • Всегда предполагайте, что пользователь может это сделать.
  • Всегда проверяйте в серверном коде, что пользователю разрешено делать то, что пользователь пытается сделать, прежде чем делать это.

Это в основном это. Если пользователь вручную изменяет на стороне клиента значения или вручную поделки пост с их собственными ценностями, одна из двух вещей должно произойти:

  • Если пользователю разрешено выполнять это действие, действие выполняется, а сервер отвечает как обычно.
  • Если пользователю не разрешено выполнять это действие, сервер отвечает на ошибку.

Что произойдет, если пользователь запросит нормальную функциональность сайта для редактирования этой записи? Это именно то, что должно произойти, если пользователь пытается сделать это вручную.

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

0

Вы не можете защитить пользователя от редактирования формы (точка формы должна быть отредактирована). И вы не можете остановить их от редактирования объектов javascirpt. То же, что и браузер. Но вы можете сохранить идентификаторы в сеансе. Таким образом, вы можете проверять каждый раз, когда вы получаете запрос, если идентификатор из формы соответствует идентификатору из сеанса.

1

Вы можете использовать проект MVC Security Extensions https://mvcsecurity.codeplex.com.

Скажет поле вы хотите защитить это Id ...

На вас метод контроллера после добавления:

[ValidateAntiModelInjection("Id")] 

В вашем взгляде оный:

@Html.AntiModelInjectionFor(m => m.Id) 
@Html.HiddenFor(m => m.Id) 

На разместят ваш Id поле будет проверено.

+0

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

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