2010-05-25 7 views
6

Ich arbeite durch NerdDinner und ich bin ein wenig verwirrt über folgenden Abschnitt ...HTML-Codierung in MVC Eingang

Zuerst haben sie ein Formular für die Schaffung ein neues Abendessen, mit einem Bündel von Textfeldern hinzugefügt delcared wie:

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

Sie zeigen zwei Möglichkeiten, dann bilden Eingabe in das Modell zur Bindung:

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

oder:

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

Ok, toll, das sieht bisher alles sehr einfach aus.

Dann etwas später auf sie sagen:

Es ist wichtig über Sicherheit immer paranoid, wenn jeder Benutzer Eingabe zu akzeptieren, und dies gilt auch, wenn Bindung Objekte Eingang zu bilden. Sie sollten immer HTML kodieren alle vom Benutzer eingegebenen Werte zu vermeiden HTML und JavaScript Injektion Angriffe

Huh vorsichtig sein? MVC verwaltet die Datenbindung für uns. Wo/wie soll man die HTML-Codierung machen?

Antwort

2

Normalerweise (aber nicht immer) möchten Sie die Werte in HTML kodieren, bevor Sie sie schreiben, normalerweise in Ihren Ansichten, aber möglicherweise auch vom Controller.

Einige Informationen hier: 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

so spielt es keine Rolle, was ich den Benutzer in das Formular eingeben lassen, solange ich nicht ausgeben wieder ohne kodiert? Ich weiß nicht wirklich, wie HTML-Injection funktioniert. – fearofawhackplanet

+1

Ja. Es gibt viele Arten von Cross-Site-Scripting-Angriffen, aber eine einfache Überprüfung auf Ihrer eigenen Website ist die Eingabe von '' überall dort, wo der Benutzer Daten eingeben kann (einschließlich beim Erstellen seines Benutzernamens). Wenn Sie das Warndialogfeld sehen (vorausgesetzt, Sie haben JavaScript aktiviert), haben Sie einen Ort gefunden, der HTML-Codierung benötigt. Es ist am besten, HTML-Code ** all ** zu codieren und diese Codierung nur bei Bedarf zu entfernen. – RedFilter

+0

ok danke orbman – fearofawhackplanet