2012-09-01 15 views
4

我只是困惑,爲什麼它是不好的做法,在視圖中使用域對象?我被告知它可以離開模擬綁定攻擊,但我不完全確定這是什麼或如何完成。我也不太明白如何將屬性複製到視圖模型將解決此問題。爲什麼我們不應該在視圖中使用域對象?

在此先感謝

+2

其他益處的旁邊(例如分離從域邏輯視圖相關邏輯)將防止[質量-分配新建分配FY](http://odetocode.com/blogs/scott/archive/2012/03/11/complete使用的ViewModels -guide到質量分配,在-ASP淨mvc.aspx) – nemesv

回答

4

您的域對象通常包含一些屬性,這些屬性可以定義像isAdmin, isDeleted, isAuthorized或任何其他安全或敏感信息的標誌或位,即使您只是以只讀狀態顯示它,也可能不希望最終用戶陷入混亂狀態視圖/ html中的屬性名稱,給一些'聰明的用戶'玩你的POST動作的機會,如果你沒有采取正確的預防措施,這可能會導致安全漏洞。

如果你使用一個ViewModel你不得不做從ViewModel <-> Model(域對象)重新映射,在此重新映射可以確保該任務只是你從任何特定用戶像希望的:

if(CurrentUser.IsAdmin) 
{ 
    //Assign just if the currrent user is admin 
    Model.IsDeleted = ViewModel.Delete; 
} 
1

你的域對象可能包含敏感信息,如IsAuthenticatedUserRoles等,不應該被允許直接從客戶端代碼的影響。

如果你的域對象不包含任何東西,但性質上顯示的屏幕,那麼你可能並不需要擺在首位的域模型。

1

鑑於使用領域模型並不總是壞事。 模型綁定攻擊提供的屬性值不用於編輯。 爲了防止模型綁定攻擊與BindAttribute標記您的行爲參數,指定與允許綁定的屬性列表包含或排除(更好)。

+0

+1 BindAttribute。將它與一個將敏感字段設置爲良好默認值的構造函數相結合,並且您是安全的。 –

相關問題