Атаки ZmEu меня тоже раздражали, поэтому я посмотрел на это.Это можно сделать с помощью HttpModule.
Добавьте следующий класс в ваш проект:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Principal;
//using log4net;
namespace YourProject
{
public class UserAgentBlockModule : IHttpModule
{
//private static readonly ILog logger = LogManager.GetLogger(typeof(UserAgentBlockModule));
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpRequest request = application.Request;
if (request.UserAgent.Contains("ZmEu"))
{
//logger.InfoFormat("ZmEu attack detected from IP {0}, aiming for url {1}", request.UserHostAddress, request.Url.ToString());
HttpContext.Current.Server.Transfer("RickRoll.htm");
}
}
public void Dispose()
{
// nothing to dispose
}
}
}
, а затем добавьте следующую строку в web.config
<httpModules>
...
<add name="UserAgentBlockFilter" type="YourProject.UserAgentBlockModule, YourProject" />
</httpModules>
... и затем добавьте подходящую страницу htm в свой проект, чтобы можно было куда-то перенаправить их.
Обратите внимание, что если вы используете log4net, вы можете комментировать строки log4net в коде, чтобы регистрировать случаи, когдафильтр включается.
Этот модуль работал для меня в тестировании (когда я отправляю ему правильные значения userAgent).Я еще не тестировал его на реальном сервере.Но это должно сработать.
Хотя, как я сказал в комментариях выше, что-то подсказывает мне, что возвращение ошибок 404 может быть менее заметным ответом, чем уведомление хакеров о том, что вы о них знаете.Некоторые из них могут воспринимать что-то подобное как вызов.Но тогда я не специалист по психологии хакеров, так что кто знает.