Unique Software

Blog

News und Trends

AllowHtml in ASP.NET MVC3

Meist ist es ja bei Eingabeformularen im Web gewünscht, dass eingegebene Werte beim späteren Rendern keinen Schaden anrichten. Genau dafür gibt es Request Validation. Dieses Feature sorgt dafür, dass keine Script-Tags eingegeben werden können, die später dann für Cross-Site-Scripting verwendet werden.
 
Nun gibt es aber doch auch Momente, in denen man doch möchte, dass HTML-Code in ein Textfeld eingegeben werden kann - z.B. dann wenn vom Benutzer Content für Webseiten generiert werden soll. Ein solches Anwendungsszenario ist häufig damit verbunden, dass ein Richtext-Editor zum Einsatz kommt, der dann eine normale Textarea mit entsprechenden Funktionen versieht. Typische Vertreter dafür sind TinyMCE oder auch der CKEditor. Wenn man die hier eingegebenen Daten dann versucht, an die Action zu übergeben, so wird das Ganze von der Request Validation bemerkt und eine entsprechende Fehlermeldung ausgegeben.
 

 
In der Fehlermeldung gibt es auch gleich einen Hinweis, was man ändern muss, damit man den Post trotzdem durchführen kann: Die Request-Validation für sämtliche Posts in der web.config zu deaktivieren. Diese Lösung ist nicht ganz so schlau.
 
Lösung 2, und bis MVC 2 auch die einzig andere Möglichkeit, ist es, die Request Validation für die komplette Action zu deaktivieren. Dazu setzt man einfach das ValidateInput-Attribut auf false.
 
[HttpPost, ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Create(Article article)
{
// do some database logic here
return View();
}
 
Ok, diese Lösung ist schon besser, da man eine bessere Kontrolle darüber hat, für welche Aktionen es gelten soll. Aber auch das ist noch nicht ganz optimal. Hier kommt nun das AllowHtml-Attribut von ASP.NET MVC 3 zur Geltung. Damit kann man auf einzelnen Properties des Models definieren, dass für diese die Request Validation nicht durchgeführt wird, da hier HTML-Code beinhaltet sein kann.
 
public class Article
{
 public int Id { get; set; }

 [AllowHtml]
 public string Content { get; set; }
}
 
Man muss nun nicht mehr sämtliche Properties von der Request Validation ausschließen, sondern kann hier dediziert definieren, wo HTML-Code enthalten sein darf und wo nicht.
kick it auf dotnet-kicks.de


Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading