2010-11-26 2 views
0

J'ai beaucoup de TextBox dans une page.comment appliquer Server.HtmlEncode pour chaque TextBox dans une page

Je voudrais savoir s'il y a une façons de vérifier programmaticalement toutes les entrées pour cette zone de texte et

appliquent Server.HtmlEncode à chacun.

Je n'ai donc pas besoin d'appliquer Server.HtmlEncode pour chaque chaîne.

Merci!

+0

Pourquoi avez-vous besoin de faire cela? –

+0

Que souhaitez-vous accomplir exactement? – Dienekes

+0

Je voudrais éviter l'utilisateur d'insérer un script malveillant à mon application Web – GibboK

Répondre

3

Vous devez créer une méthode utilitaire pour cela. Quelque chose sur les lignes de:

Version simple si aucun texte imbriqué contrôle présente:

public Dictionary<string, string> ReturnsAllTextEnteredOnPage() 
{ 
    Dictionary<string, string> allTextEnteredOnPage = new Dictionary<string, string>(); 
    foreach (var control in Page.Controls) 
    { 
     if (control is TextBox) 
     { 
     TextBox ctrl = (TextBox)control; 
     allTextEnteredOnPage.Add(ctrl.ID, Server.HtmlEncode(ctrl.Text)); 
     } 
    } 
    return allTextEnteredOnPage; 
} 

Un peu la version complexe qui prend en compte toutes les zones de texte présents sur une page:

public Dictionary<string, string> ReturnsAllTextEnteredOnPage() 
{ 
    Dictionary<string, string> allTextEnteredOnPage = new Dictionary<string, string>(); 
    var allControls = FlattenChildren(Page); 
    var allTextControls = allControls.OfType<TextBox>(); 
    foreach(var textCtrl in allTextControls) 
    { 
    allTextEnteredOnPage.Add(textCtrl.ID, Server.HtmlEncode(textCtrl.Text)); 
    } 
    return allTextEnteredOnPage;   
} 

La méthode ci-dessus utilise une méthode appelée FlattenChildren qui peut être prise de here.

Deuxièmement, je nai utilisé un éditeur pour taper ce code ..

+0

pouvez-vous fournir des exemples? – GibboK

+1

^^ exemple donné .. n puis-je savoir pourquoi une downvote? – Dienekes

+0

merci votre classe semble bon, je ne vous ai pas donné de downvote! Merci de votre aide! – GibboK

0

Une façon de le faire serait de sous-classe le contrôle TextBox et passer outre la propriété Text pour revenir simplement une chaîne codée HTML. Ensuite, vous pouvez utiliser ce contrôle tout au long de votre projet où vous avez besoin d'encoder des chaînes HTML.

Sinon, vous pouvez déclarer une méthode d'extension pour tous les objets TextBox qui renvoie une version codée HTML de la chaîne, et vous pouvez simplement appeler cette méthode d'extension tout au long de votre projet au lieu de se référer à la propriété .Text:

EDIT: Code helper méthode d'extension Ajout échantillon

class TextBoxHelper{ public static string GetHtmlEncodedString(this System.Web.UI.WebControls.TextBox textbox){ return Server.HtmlEncode(textbox.Text); } } 
1

y at-il une raison particulière pour coder l'entrée?

Habituellement, vous encoderiez la sortie Html, c'est-à-dire lorsque vous affichez les données.

EDIT:

Vous pouvez jeter un oeil à Microsoft Web Protection Library si vous voulez durcir votre application contre les attaques XSS et attaques par injection SQL.

0

Problème ici est que si vous modifiez les valeurs des contrôles, cela pourrait causer une confusion avec les utilisateurs (c'est-à-dire que ce n'est pas ce que j'ai tapé). Donc ce que vous pouvez faire est de créer une collection d'entrées aseptisés et l'utiliser dans votre application comme suit:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Dictionary<string, string> values = new Dictionary<string, string>(); 
    if (this.IsPostBack) 
    { 
     foreach (var control in this.Controls) 
     { 
      TextBox textbox = control as TextBox; 
      if (textbox != null) 
      { 
       values.Add(textbox.ID, Server.HtmlEncode(textbox.Text)); 
      } 
     }   
    } 
} 

valeurs contient alors au-dessus des entrées santised. Je recommande également de regarder le Anti-XSS library pour une protection supplémentaire dans ce type de scénario.

+0

Je ne crois pas, qu'un foreach simple obtiendra chaque zone de texte - pensez à ceux imbriqués aussi bien! –

Questions connexes