如何为页面中的每个TextBox应用Server.HtmlEncode

时间:2010-11-26 07:44:03

标签: c# asp.net

我在页面中有很多TextBox。

我想知道是否有一种方法可以在语法上检查此TextBox和

的所有输入

Server.HtmlEncode应用于每个人。

所以我不需要为每个String应用Server.HtmlEncode。

谢谢!

4 个答案:

答案 0 :(得分:3)

您需要为此创建实用程序方法。有点像:

如果没有嵌套文本控件,则为简单版本:

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;
}

一个复杂的版本,它考虑了页面上的所有文本框:

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;        
}

上述方法使用名为FlattenChildren的方法,可以从here获取。

其次,我没有使用编辑器输入该代码..

答案 1 :(得分:1)

编码输入有特殊原因吗?

通常你会对Html进行编码输出,即显示数据时。

编辑:

如果您想强化您的应用程序以防止XSS和SQL注入攻击,您可能需要查看Microsoft Web Protection Library

答案 2 :(得分:0)

执行此操作的一种方法是继承TextBox控件并覆盖Text属性以简单地返回HTML编码的字符串。然后,您可以在整个项目中使用该控件来进行HTML编码字符串。

或者,您可以为所有TextBox对象声明一个扩展方法,该方法将返回该字符串的HTML编码版本,您只需在整个项目中调用该扩展方法,而不是引用.Text属性:

编辑:添加了扩展方法帮助程序代码示例

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

答案 3 :(得分:0)

问题在于,如果您更改控件的值,那么可能会导致与用户混淆(即,这不是我键入的内容)。所以你可以做的是创建一个清理输入的集合,并在你的应用程序中使用它,如下所示:

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));
             }
        }        
    }
}

上面的值将包含santised输入。我还建议在这种情况下查看Anti-XSS library以获得额外的保护。

相关问题