我正在维护一个ASP.net + c#[.net版本3.5]应用程序。要求是,在整个应用程序中,必须检查传递给DAL层的任何字符串变量是否有一些指定的单词和符号。
在这种情况下,我必须继续每个方法,然后每个字符串参数检查特定的单词和符号,这将花费很多时间。所以我在想一种我不知道或不喜欢的方法
每当从BLL层调用任何DAL层类方法的请求时,必须使用传递给实际DAL方法的所有参数自动调用在DAL层下定义的公共方法 (这个常见的方法我应该抵制DAL的构造函数)。 在常用方法中,我应该检查所有字符串参数并在需要时更改它们的值,然后在从此方法返回后,实际方法将调用更改的值。
如果不可能做到这一点,请建议我采取其他方法。
答案 0 :(得分:2)
您可以使用其中一个AOP Fameworks在DAL方法中注入代码。 Postsharp将是更好的之一。
答案 1 :(得分:2)
您要实现此类功能的唯一方法是使用一些面向方面的编程库,如下所述:What is the best implementation for AOP in .Net?
听起来你需要确认用户没有尝试创建SQL注入。首先,任何设计良好的应用程序都不会创建SQL注入的可能性,因此不需要这样的验证。如果某些其他要求需要(记录此类尝试),则应在HTTP请求级别执行此操作。您可以创建IHttpModule
(或者只编写global.asax
中的代码,该代码将审核Request
对象中的所有值,并查看是否包含坏词等。
protected void Application_PostAuthorizeRequest(object sender, EventArgs e)
{
var collection = this.Context.Request.Params;
foreach (var key in collection.Keys)
{
if (ContainsBadWords(collection[key]))
Log("Request key " + key + " contains bad words: " + collection[key]);
}
}