我在页面中有很多TextBox。
我想知道是否有一种方法可以在语法上检查此TextBox和
的所有输入将Server.HtmlEncode
应用于每个人。
所以我不需要为每个String应用Server.HtmlEncode。
谢谢!
答案 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以获得额外的保护。