2010-05-25 9 views
6

Je travaille par NerdDinner et je suis un peu confus au sujet de la section suivante ...Html encodage en entrée MVC

D'abord ils ont ajouté un formulaire pour créer un nouveau dîner, avec un tas de textboxes delcared comme:

<%= Html.TextArea("Description") %>

Ils montrent alors deux façons d'entrée de la forme contraignante du modèle:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create() { 
    Dinner dinner = new Dinner(); 
    UpdateModel(dinner); 
    ... 
} 

ou:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) { ... } 

Ok, super, tout semble très facile jusqu'à maintenant.

Puis un peu plus tard, ils disent:

Il est important de toujours être paranoïaque sur la sécurité lors de l'acceptation à tout utilisateur d'entrée , et cela est également vrai lorsque objets de liaison pour former entrée. Vous devriez faire attention à toujours HTML encode toutes les valeurs entrées par l'utilisateur pour éviter HTML et JavaScript par injection attaque

Huh? MVC gère la liaison de données pour nous. Où/comment êtes-vous censé faire le codage HTML?

Répondre

2

Vous souhaitez généralement (mais pas toujours) encoder les valeurs avant de les écrire, généralement dans vos vues, mais peut-être aussi à partir du contrôleur.

Quelques infos ici: http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net-mvc-2.aspx

+0

donc peu importe ce que je laisse l'utilisateur d'entrer dans la forme, tant que je ne suis pas sortie encore sans codage? Je ne sais pas vraiment comment fonctionne l'injection HTML. – fearofawhackplanet

+1

Oui. Il existe de nombreux types d'attaques de script intersite, mais une simple vérification sur votre propre site consiste à entrer l'alerte 'partout où l'utilisateur peut entrer des données (y compris lors de la création de son nom d'utilisateur). Si vous voyez le popup d'alerte (en supposant que vous avez activé javascript), vous aurez trouvé un endroit qui nécessite un encodage HTML. Il est préférable de coder la sortie ** all ** au format HTML et de ne supprimer ce codage que lorsque cela est nécessaire. – RedFilter

+0

ok merci orbman – fearofawhackplanet