Обновить следующий разговор:
Могу ли я предложить вам внедрить фильтр, который может идентифицировать сканеры по заголовкам запросов и регистрировать анон-куки, которые вы можете позже в тот же день. расшифруйте и удалите записи anon aspnet_profile и aspnet_users с соответствующим идентификатором пользователя.
Возможно, вы сражаетесь в проигранной битве, но по крайней мере вы получите четкое представление о том, откуда весь трафик.
Файлы cookie AnonymousId и, по доверенности, анонимные профили действительны в течение 90 дней после последнего использования. Это может привести к скоплению аноновых профилей.
Очень простой способ справиться с этим - использовать ProfileManager
.
ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));
удалит все анонимные профили, к которым не обращались в течение последних 7 дней.
Но это оставляет вас с анонимными записями в aspnet_Users. Membership
не предоставляет метод, аналогичный ProfileManager
, для удаления устаревших анонимных пользователей.
Итак ...
Лучшая ставка - это сырая sql-атака, удаление из aspnet_Profile, где вы считаете их устаревшими, а затем выполнить тот же запрос в aspnet_User, где IsAnonymous = 1
.
Удачи с этим. Как только вы очистите его, просто оставайтесь на нем.
Обновленное обновление:
Приведенный ниже код действителен только для IIS7 И если вы направляете все запросы через ASP.Net
Вы могли бы реализовать модуль, который следит за запросами к robots.txt
, получить файл cookie с анонимным идентификатором и сохранить его в таблице роботов, которую вы можете использовать для безопасной очистки ваших таблиц членства / профиля профиля робота-мета. каждую ночь. Это может помочь.
Пример:
using System;
using System.Diagnostics;
using System.Web;
namespace NoDomoArigatoMisterRoboto
{
public class RobotLoggerModule : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += PreSendRequestHeaders;
}
public void Dispose()
{
//noop
}
#endregion
private static void PreSendRequestHeaders(object sender, EventArgs e)
{
HttpRequest request = ((HttpApplication)sender).Request;
bool isRobot =
request.Url.GetLeftPart(UriPartial.Path).EndsWith("robots.txt", StringComparison.InvariantCultureIgnoreCase);
string anonymousId = request.AnonymousID;
if (anonymousId != null && isRobot)
{
// log this id for pruning later
Trace.WriteLine(string.Format("{0} is a robot.", anonymousId));
}
}
}
}
Ссылка: http://www.codeproject.com/Articles/39026/Exploring-Web-config-system-web-httpModules.aspx