我有一个遗留的 ASP.NET 应用程序(VS2005),大约有 62 个页面和 84 个文本框控件分布在它们之间(每页 2 到 6 个文本框不等)。我想实施验证以防止提交会导致 XSS 漏洞的特殊字符。有没有办法一次性实现适用于整个应用程序中所有文本框控件的全局验证功能?(尽量避免每个文本框使用一个验证器,尽量减少对现有代码的更改)。
提前致谢
我有一个遗留的 ASP.NET 应用程序(VS2005),大约有 62 个页面和 84 个文本框控件分布在它们之间(每页 2 到 6 个文本框不等)。我想实施验证以防止提交会导致 XSS 漏洞的特殊字符。有没有办法一次性实现适用于整个应用程序中所有文本框控件的全局验证功能?(尽量避免每个文本框使用一个验证器,尽量减少对现有代码的更改)。
提前致谢
You could listen for the submit event and prevent it in case one or more textboxes contains a certain pattern:
$(function(){
$('form').on('submit', function(e){
var $invalidTextboxes = $('input[type="text"]').filter(function(){
return this.value.match(/abc+d/); //your pattern here
});
if($invalidTextboxes.length){
alert('invalid textbox value');
e.preventDefault();
}
});
});
If you have more forms on the page and want to pinpoint the one generated by webforms:
How to capture submit event using jQuery in an ASP.NET application?
您可以使用继承来解决此问题:
第一步:在基类中创建静态方法
// Return true if is in valid e-mail format.
public static bool IsValidEmail( string sEmail )
{
return Regex.IsMatch(sEmail, @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"+ "@"+ @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$");
}
步骤 2:将此方法分配给 Child 类中验证所需的所有文本框
例子:
if (this.TextboxEmail.Text.Length > 0 &&
IsValidEmail(this.TextboxEmail.Text) == false)
{
ErrMssg("Invalid Email");
}
在全局级别执行验证的更好和通用的方法是借助HTTP Module。
您可以添加一个从模块类继承的新 c# 类。在类中,您可以在表单元素上添加迭代并执行所需的验证。这将帮助您在全局级别构建文本框验证的通用实现。
class XssModule : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication application)
{
application.PostAcquireRequestState += new EventHandler(Application_PostAcquireRequestState);
}
public void Dispose()
{
}
#endregion
private void Application_PostAcquireRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Session != null)
{
//Perform the iteration on the form elements here.
}
}
}