1

我正在维护一个 ASP.net + c# [.net version 3.5] 应用程序。要求是,在整个应用程序中,必须检查传递给 DAL 层的任何字符串变量是否有某些指定的单词和符号。

在这种情况下,我必须使用每个方法,然后使用每个字符串参数来检查特定的单词和符号,这将花费大量时间。所以我正在考虑一种我不知道可能或不喜欢的方法

每当请求从 BLL 层调用 DAL 层类的任何方法时,必须使用传递给实际 DAL 方法的所有参数自动调用在 DAL 层下定义的通用方法(我应该在 DAL 的构造函数上抵制这种通用方法)。在常用方法中,我应该检查所有字符串参数并在需要时更改它们的值,然后在从该方法返回后,实际方法将以更改的值调用。

如果这是不可能的,请向我建议任何其他方法,这需要最少的努力。

4

2 回答 2

2

您可以使用 AOP Fameworks 之一在您的 DAL 方法中注入代码。 Postsharp将是更好的之一。

于 2013-03-13T15:00:06.927 回答
2

实现这种功能的唯一方法是使用一些面向方面的编程库,例如这里讨论的:什么是 .Net 中 AOP 的最佳实现?

听起来您确实需要验证用户是否没有尝试创建 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]);
    }
}
于 2013-03-13T15:01:45.847 回答