업데이트 :
난 당신이 요청 헤더를 통해 크롤러를 식별 할 수있는 필터를 구현하고, 곧 쿠키 당신이 할 수 나중에 같은 일을 기록하는 것이 좋습니다 수 있습니다. 해당 UserId와 함께 anon aspnet_profile 및 aspnet_users 레코드를 해독하고 삭제하십시오.
잃어버린 전투에 맞설 수도 있지만 적어도 모든 트래픽의 출처를 명확히 알 수 있습니다.
AnonymousId 쿠키 및 프록시 익명 프로필은 마지막 사용 후 90 일 동안 유효합니다. 이로 인해 anon 프로파일이 쌓일 수 있습니다.
매우 간단한 방법은 ProfileManager
을 사용하는 것입니다.
ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));
은 지난 7 일 동안 액세스되지 않은 모든 익명 프로필을 삭제합니다.
하지만 aspnet_Users에 익명 레코드가 남습니다. Membership
은 부실 익명 사용자를 삭제하기 위해 ProfileManager
과 유사한 방법을 노출하지 않습니다.
그래서 ...
가장 좋은 방법은 aspnet_Profile에서 aspnet_User에 대해 동일한 쿼리를 실행하고 부실하다고 생각하는 곳에서 원시 SQL 공격을 삭제하는 것입니다. 여기서 IsAnonymous = 1
입니다.
행운을 빈다. 일단 당신이 그것을 정리하게되면, 그것의 꼭대기에 머물러 라.
업데이트 업데이트 :
아래 코드는 IIS7에 대해서만 유효합니다 그리고 당신은 ASP.Net 통해
을 모든 요청을 채널 당신은 robots.txt
에 요청 시계 모듈을 구현할 수 있으며, 익명의 아이디 쿠키를 가져 와서 로봇 테이블에 숨겨두고 매일 밤 로봇 메타의 회원/프로필 테이블을 안전하게 제거하는 데 사용할 수 있습니다. 도움이 될 것입니다.
예 :
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 당신이 당신의 테이블이 무엇 인덱스
? 기본 프로필 공급자를 사용하고 있습니까? –
@Daniel, 추가 색인이 없으며 바닐라 .Net 멤버쉽 설정 만 있습니다. 우리는 사용자 정의 프로파일 제공자를 사용하고 있습니다. – Mantorok
@Mantarok - 아이디어가 있었는데, 업데이트 된 답변을 확인하십시오. –