2016-05-02 1 views
0

J'ai une application Web utilisant des pages aspx. D'abord, je voulais utiliser Server.HtmlEncode(value) whhen afficher la valeur dans une LabelledTextBoxUne valeur Request.Form potentiellement dangereuse a été détectée à partir du client: Quelle solution

public interface ILabelledControl 
{ 
    bool ReadOnly { get; set; } 
} 

[DefaultProperty("Text")] 
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")] 
public class LabelledTextBox : TextBox, ILabelledControl 
{ 
    //public Unit EditableWidth { get; set; } 
    public Unit ReadOnlyWidth { get; set; } 

    protected override void Render(System.Web.UI.HtmlTextWriter writer) 
    { 
     if (this.ReadOnly) 
     { 
      System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label(); 
      foreach (string att in this.Attributes.Keys) 
       lbl.Attributes.Add(att, this.Attributes[att]); 
      lbl.Text = this.Text; 
      lbl.ForeColor = ForeColor; 
      //lbl.Width = this.Width; 
      if (ReadOnlyWidth != null) 
       lbl.Width = ReadOnlyWidth; 
      lbl.CssClass = CssClass; 
      lbl.ID = this.ID; 
      lbl.RenderControl(writer); 
     } 
     else 
     { 

      base.Render(writer); 
     } 
    } 
} 

La valeur <script>alert("hello")</script> a été affiché, mais le script a été exécuté.

Par la suite, je voulais essayer une autre solution qui devait gérer l'exception

A potentially dangerous Request.Form value was detected from the client 

de rester sur la même page contenant le formulaire et l'affichage d'un message d'erreur sur le dessus avec un message générique comme « S'il vous plaît être Assurez-vous que toutes les entrées ne contiennent pas de caractères tels que '<' ou '>' "

Solution 1: Qu'est-ce que je fais de mal?

Solution 2: Comment puis-je gérer cette exception et rester sur la même page avec le formulaire rempli

général: Quelle solution est la meilleure?

Thx!

Répondre

0

Une valeur Request.Form potentiellement dangereuse a été détectée à partir du client

Vous voyez cette exception du serveur parce que l'utilisateur entre balise HTML (comme <>) à l'intérieur contrôle Textbox, et soumet la forme.

Il n'y a rien que vous pouvez l'empêcher côté serveur. Cependant, vous pouvez créer un script de validation côté client et avertir l'utilisateur ou supprimer les balises.

Par exemple,

<asp:RegularExpressionValidator 
    ID="RegularExpressionValidator1" runat="server"  
    ControlToValidate="MyTextBox" 
    ErrorMessage="Please do not enter HTML tags." 
    ValidationExpression="<(.|\n)*?>"> 
</asp:RegularExpressionValidator> 

L'alerte de valeur ("bonjour") a été affiché, mais le script a été exécuté

Ceci est opposé du scénario ci-dessus. Le serveur rend l'étiquette de script au navigateur.

Afin de l'empêcher, comme vous l'avez dit, vous voulez encoder la chaîne en utilisant HttpServerUtility.HtmlEncode avant de le déchirer.

lbl.Text = Server.HtmlEncode(this.Text); 
+0

1) Comment puis-je créer une validation côté client? Quels caractères dois-je supprimer? Il y a beaucoup de personnages qui peuvent être dangereux, ai-je tort? 2) J'ai essayé d'utiliser HtmlEncode - la valeur est affichée mais toujours exécutée – Weedoze

+0

1) J'ai mis à jour la première réponse. 2) HtmlEncode est suffisant. Veuillez le tester dans le contrôle TextBox standard au lieu du contrôle serveur personnalisé. – Win