ASP.NET MVC: Ist die Validierung von Datenanmerkungen ausreichend?

Ich verwende die Validierung von Datenanmerkungen in ASP.NET MVC 2. Diese neue Funktion hat viel Zeit gespart, da ich jetzt in der Lage bin, sowohl die clientseitige Validierung als auch die serverseitige Validierung an einem Ort zu definieren. Während ich einige detaillierte Tests durchführte, wurde mir jedoch klar, dass es für jemanden recht einfach ist, die serverseitige Validierung zu umgehen, wenn ich mich nur auf die Validierung von Data Annotation verlasse. Wenn ich zum Beispiel ein erforderliches Feld durch Kommentieren der Eigenschaft mit dem Attribut [Erforderlich] definiert und ein Textfeld für dieses erforderliche Feld in einem Formular platziert habe, kann ein Benutzer das Textfeld einfach aus dem DOM entfernen (was einfach über Firebug erfolgen kann). Jetzt wird die Validierung der Datenanmerkung für diese Eigenschaft während der Modellbindung in einem Controller nicht mehr ausgelöst. Um sicherzustellen, dass die "erforderliche" Validierung ausgelöst wird, kann ich die Validierung wiederholen, nachdem ModelBinding ausgeführt wurde, aber dann würde ich meine Validierungslogik wiederholen.

Was ist die Empfehlung aller zur Validierung? Ist die Validierung von Data Annotation ausreichend? Oder muss die Validierung wiederholt werden, um sicherzustellen, dass Validierungen in allen Situationen ausgelöst werden?

Folgekommentar: Aufgrund der folgenden Antworten kann ich mich anscheinend nicht allein auf die Validierung von Model Binder und Data Annotation verlassen. Gibt es eine einfache Möglichkeit für meinen Service-Layer, die Validierung basierend auf den in den Datenanmerkungen definierten Werten auszulösen, da wir zu dem Schluss kommen, dass eine zusätzliche serverseitige Validierung erforderlich ist? Es sieht so aus, als würden wir das Beste aus beiden Wörtern herausholen ... wir brauchen den Validierungscode nicht zu wiederholen, stellen aber dennoch sicher, dass die Validierung auch dann ausgeführt wird, wenn Model Binder sie nicht auslöst.

Ich werde diesen Folgekommentar als separate Frage posten, da er eine andere Frage als die ursprüngliche stellt.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage