Merci pour les réponses jusqu'à présent ils ont été d'une grande aide dans la compréhension des avantages/inconvénients des deux approches. J'ai une chose à ajouter que personne ne l'a mentionné.
Plus-affichage d'attaque
Préoccupante, l'inconvénient de se liant directement à l'encontre de DB entités est un "sur-affichage d'attaque". C'est là que l'attaquant, à l'aide d'un outil pas plus avancé que FireBug, pouvez insérer des champs de formulaire ne sont pas destinés à être modifiable par l'utilisateur, mais qui n'existe pas sur la DB de l'entité.
Envisager une "Modifier mon profil" de la page. Votre point de vue pourrait ressembler à ceci:
@using(Html.BeginForm() {
<div>
@Html.LabelFor(x=> x.FirstName)
@Html.TextBoxFor(x=> x.FirstName)
</div>
<div>
@Html.LabelFor(x=> x.LastName)
@Html.TextBoxFor(x=> x.LastName)
</div>
<input type="Submit" value="Save" />
}
Elle rendrait le code HTML suivant:
<form action="/profile/edit" method="post">
<div>
<label for="FirstName">FirstName</label>
<input type="text" name="FirstName" value="" />
</div>
<div>
<label for="LastName">LastName</label>
<input type="text" name="LastName" value="" />
</div>
<input type="Submit" value="Save" />
</form>
À l'aide de FireBug, un attaquant doit simplement insérer un morceau de code HTML à l'intérieur de la forme:
<input type="hidden" name="IsAdmin" value="true" />
...et soudain, les utilisateurs sont en mesure de modifier les données de très inattendu et de manière nuisible.
Voici quelques même les plus cachés des champs de formulaire:
<input type="hidden" name="ShoppingCart.Items[0].Price" value="0.01" />
<input type="hidden" name="BankAccount.Balance" value="1000000" />
<input type="hidden" name="User.Administrator.Password" value="hackedPassword" />
Ouch!
Info tirée de:
http://hendryluk.wordpress.com/tag/asp-net-mvc/