MVC, загрузка POST data в объекты модели
От: Alexander Polyakov  
Дата: 13.10.10 10:36
Оценка:
Вот тут описаны Over\Under-Posting Problem:

What happens if the bad guy includes "Approved=true" in the form post? The model binder will happily set the Approved property to true. That's definitely not what you intended! It actually gets worse: if the bad guy guesses your entity object is called Blog, he might try posting values into fields like "Blog.Body" and actually be able to overwrite the body of the blog post. This is a potential disaster!
http://bradwilson.typepad.com/blog/2010/01/input-validation-...


Решение, которое предлагает ASP.NET MVC, мягко говоря неудобно... неудобно писать и майтейнить такие white списки и view-specific models:

Users who bind to ORM objects should, at a bare minimum, use white-lists with [Bind] or (Try)UpdateModel to ensure that no unwanted data ends up in their objects, but it would be much safer in the long run to use view-specific models.


Хотелось бы обсудить следующие пункты:

1. Интересно, как этот вопрос решается в MVC Web фрайворках на других платформах (не .Net)?

2. Почему бы просто не подписывать электронной подписью (точнее, подойдет просто HMAC) список key-ев для post data ? Т.е. при отправке на клиента подписываем список key-ев и кладем подпись на форму, а при последующем получении post-а проверяем, что этот список остался неизменным. Это покроет 99% реальных сценариев с post запросами.

3. Да, кстати, в Web Forms-ах с эти было все тип-топ , слой контролов с этим отлично справлялся. Конечно, Web Forms-ы говно. Но хорошее то можно было и позаимствовать.

4. Из общих соображений следует, что имеется всего три альтернативы:
1. должен быть некоторый общий код, использующийся и на рендеренге и при обработке соответствующего POST-а,
2.1 шифрование/подпись,
2.2. хранение key-ев на сервере,
3. тупой труд девелопера.
Интересно, что выбирают в MVC-фраймворках на других платформах?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.