用ASP.NET MVC阻止ZmEu攻击

JGi*_*tin 10 asp.net security asp.net-mvc elmah

最近我的elmah异常日志充满了人们使用这样的大坝ZmEu安全软件对我的服务器的尝试

对于那些想"ZmEu到底是什么?"的人来说,这是一个解释......

"ZmEu似乎是一个安全工具,用于发现PHPMyAdmin版本2.xx中的安全漏洞,这是一个基于Web的MySQL数据库管理器.该工具似乎起源于东欧的某个地方.就像所有黑帽安全工具似乎发生的事情一样,它已经进入了中国,从那时起它就被用于对世界各地的网络服务器进行不间断的暴力攻击."

这是一个关于这个令人讨厌的攻击的重要链接 - > http://www.philriesch.com/articles/2010/07/getting-a-little-sick-of-zmeu/

我使用.net所以他们不会在我的服务器上找到PHPMyAdmin但事实上我的日志充满了ZEEu攻击它变得无聊.

上面的链接使用HTAccess提供了很好的修复,但我使用的是IIS7.5,而不是apache.我有一个asp.net MVC 2站点,所以我使用global.asax文件来创建我的路由

这是HTAccess的消毒

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/path/to/your/abusefile.php
RewriteCond %{HTTP_USER_AGENT} (.*)ZmEu(.*)
RewriteRule .* http://www.yourdomain.com/path/to/your/abusefile.php [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我的问题是我可以在Global.ascx文件中添加这样的东西吗?

cod*_*ike 6

另一个答案是另一个 ...这个特别阻止Elmah记录ZmEu生成的404错误,同时保持其余网站的行为不变.这可能比直接向黑客返回消息更不明显.

您可以通过各种方式控制Elmah记录的事物,一种方法是将其添加到Global.asax

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.GetBaseException() is HttpException)
    {
        HttpException httpEx = (HttpException)e.Exception.GetBaseException();
        if (httpEx.GetHttpCode() == 404)
        {
            if (Request.UserAgent.Contains("ZmEu"))
            {
                // stop Elmah from logging it
                e.Dismiss();
                // log it somewhere else
                logger.InfoFormat("ZmEu request detected from IP {0} at address {1}", Request.UserHostAddress, Request.Url);
            }           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要触发此事件,您需要从项目中引用Elmah DLL,并将其添加using Elmah;到Global.asax.cs的顶部.

行开始logger.InfoFormat假定您使用的是log4net.如果没有,请将其更改为其他内容.