2009-05-19 2 views
0

Есть ли разница в безопасности между этими двумя моделями, которые должны быть предоставлены View? То есть. во втором примере может ли веб-пользователь/хакер получить доступ к методам каким-либо образом?Безопасность Viewmodel в asp.net mvc

public class ObjectViewModel 
    { 
    public PropertyA {get;set;} 
    public PropertyB {get;set;} 
    public PropertyC {get;set;} 
    } 



public class ObjectViewModel2 
    { 
    public PropertyA {get; private set;} 
    public PropertyB {get; private set;} 
    public PropertyC {get; private set;} 

    private void SetPropertyA() 
    { 
     ...GetDataFromRepository(); 
    } 

    private void SetPropertyB() 
    { 
     ...GetDataFromRepository(); 
    } 

    private void SetPropertyC() 
    { 
     ...GetDataFromRepository(); 
    } 
} 

ответ

4

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

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

1

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

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

1

При обходе механизма просмотра и возвращении чего-то вроде Json(model) или XmlResult(model) вы можете предоставить свои данные. Однако, поскольку ваши данные сериализуются , ваши методы модели просмотра больше не применяются.

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