2010-11-26 6 views
0

Il est facile de mettre notre action de ne pas valider l'entrée juste l'attribut accrochait commePeut-on définir ValidatInput (false) pour un seul élément?

[HttpPost, ValidateInput(false)] 
public ActionResult Signup(SignupModel model) 
{ 
    ... 
} 

Mais je me demandais, est-il un moyen de le faire que cela dans un seul champ de formulaire? ou pas tous dans le <form>

ou, je dois utiliser cela et puis s'inquiéter de coder correctement tous les autres champs?

Répondre

0

Vous devez et non compter sur ValidateInput pour 'encoder' vos valeurs. Il n'encode pas les valeurs - il rejette purement et simplement certaines valeurs. Et même si vous l'utilisez, doit toujours encoder toutes vos valeurs qui sont entrées par l'utilisateur et affichées sur le site de quelque façon que ce soit.

En fait, à cause de cela - je n'ai jamais utilisé cette validation moi-même. Par exemple, si tout ce que je faisais s'appuyait sur cette validation, les gens ne seraient pas capables d'entrer des choses très basiques dans des formes comme celle-ci, comme essayer d'afficher un exemple HTML.

Mais même la documentation MSDN et tous les livres que j'ai lus ont dit que la validation ASP.NET pas vous protège contre toutes les entrées malveillantes possibles. Donc, essentiellement, vous pouvez compter sur elle pour protéger vos utilisateurs. Vous devez toujours encoder les valeurs que vous affichez (et vous ne devriez les encoder que lorsque vous les affichez, sinon vous vous retrouverez avec toutes sortes de bugs d'affichage où vous avez des choses à double-encodage)

+0

chose est que j'ai besoin d'accepter le code html dans un seul champ du formulaire, et je ne suis pas sûr quel chemin prendre. – balexandre

+0

N'utilisez pas le 'valider' n'importe où; Peu importe que vous utilisiez la validation intégrée, vous devez toujours encoder les autres champs. Mais assurez-vous de faire ce codage pour ces autres champs. –

+0

donc, si j'utilise 'ValidateInput (true)' je n'ai pas vraiment besoin d'encoder toutes les valeurs, non? – balexandre

0

En utilisant MVC3, le L'attribut peut être appliqué au modèle en spécifiant SkipRequestValidation.

+0

l'étiquette dit spécifiquement 'asp.net-mvc-2' – balexandre

Questions connexes