2010-09-27 4 views
5

J'ai un site ASP.NET 4 sur lequel je veux permettre aux gens de mettre '<' dans leur mot de passe. Cependant, .NET fait obstacle en bloquant (ce qu'il voit comme) une tentative de mettre du HTML dans un champ de formulaire. Je sais que je peux désactiver complètement la validation d'entrée, mais je veux seulement l'éteindre pour ce champ. Est-ce que quelqu'un sait un moyen facile de le faire?Désactiver la validation d'entrée pour un seul champ

+0

Y at-il une raison particulière que vous avez besoin <être un mot de passe? –

+9

@ eddy556 - a-t-il besoin d'une raison particulière? – Oded

+0

@Oded - Bien sûr qu'il le fait, je peux comprendre les avantages d'avoir un caractère supplémentaire, mais si c'est vrai pourquoi veut-il seulement permettre vient à l'esprit. –

Répondre

0

Vous pouvez uniquement désactiver la validation d'entrée pour toute la page. La seule solution que je peux penser est de désactiver la validation d'entrée, puis nettoyer tous les autres champs de saisie (sans mot de passe) en utilisant quelque chose comme Anti-XSS.

+0

Merci de pointer sur un lien sans citer l'exemple. Dead link now –

+1

Ce n'est pas un exemple, c'était un lien vers une bibliothèque qui fournit des fonctionnalités anti-xss. Maintenant à https://www.nuget.org/packages/AntiXSS/4.3.0. –

+0

Ok désolé, mais maintenant je ne peux pas annuler mon down-vote. Pourriez-vous modifier votre message avec le nouveau lien afin que je puisse le faire? –

0

Vous pouvez désactiver la validation d'entrée pour l'action MVC unique à l'aide de ValidateInputAttribute. Puisque vous n'acceptez que le nom d'utilisateur/mot de passe (je suppose), vous devriez être en mesure de nettoyer vous-même les caractères non valides. Utilisez le Microsoft Web Protection Library pour le faire.

+0

Ceci est Webforms, pas MVC, et je avoir beaucoup d'entrées sur cette page. Sinon, cela fonctionnerait très bien :) – eliah

+1

Mah bad. Il existe une propriété ValidateRequest sur la directive @Page que vous pouvez utiliser pour désactiver la validation uniquement pour cette page particulière, mais je pense que c'est aussi granulaire que vous pouvez obtenir. –

0

Remarque dans ASP.NET 4 et supérieur pour que ValidateRequest dans la directive @Page fonctionne, vous devez ajouter <httpRuntime requestValidationMode="2.0" /> à web.config. Voir cette page pour plus de détails: http://www.asp.net/whitepapers/aspnet4/breaking-changes

Mais ceci est mon approche préférée:

namespace Controls 
{ 
    public class HtmlTextBox : TextBox 
    { 
     protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) 
     { 
      bool res = base.LoadPostData(postDataKey, postCollection); 
      Text = Text.Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&"); 
      return res; 
     } 

     protected override void OnPreRender(EventArgs e) 
     { 
      base.OnPreRender(e); 

      ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "htmlTextBox" + UniqueID, "try { var item = document.getElementsByName('" + UniqueID + "')[0]; item.value = item.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'); } catch (err) {}"); 
     } 
    } 
} 

Et puis enregistrer le contrôle web.config:

<system.web> 
    <pages> 
    <controls> 
     <add tagPrefix="uc1" namespace="Controls" /> 
    </controls> 
    </pages> 
</system.web> 

De cette façon, vous pouvez simplement utiliser <uc1:HtmlTextBox runat="server" /> Si vous souhaitez autoriser la zone de texte à publier le code HTML, les autres contrôles sur la page seront toujours bloqués de la publication de HTML contrairement à l'approche consistant à désactiver ValidateRequest.

1

Il est maintenant possible avec 4,5 .NET.

Mettez à jour votre web.config:

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 

Réglez ensuite ValidateRequestMode="Disabled" sur les commandes de votre mot de passe:

<asp:YourControl id="YourControl" runat="server" ValidateRequestMode="Disabled"/> 

Note - après la mise à jour web.config, vous croiserez peut-être l'erreur WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Voir ASP.Net 2012 Unobtrusive Validation with jQuery pour plus d'informations à ce sujet.

Plus d'informations sur RequestValidationMode 4.5: requestValidationMode 4.5 vs 2.0

Questions connexes