数以百万计的匿名ASP.Net个人资料?

时间:2010-05-04 10:13:04

标签: asp.net membership

更新:我刚刚意识到我们正在使用Google Mini Search来抓取网站,以便我们支持Google搜索。这必然会创建一个匿名的个人资料,不仅可以进行每次抓取,甚至可以创建每个页面 - 这是可能的吗?

大家好,需要一些建议!

我们的网站每天大约收到50,000次点击,我们使用匿名ASP.Net会员资料/用户,这导致数百万(当前为4.5m)的“活动”配置文件,并且数据库正在“爬行”,我们有一个夜间任务,清理所有不活跃的任务。

我们无法拥有450万独立访客(我们的县人口只有1/2万),这可能是由爬虫和蜘蛛引起的吗?

另外,如果我们不得不忍受大量的配置文件,那么无论如何都要优化数据库吗?

由于

千电子伏

2 个答案:

答案 0 :(得分:2)

更新以下对话:

我可能会建议您实现一个过滤器,该过滤器可以通过请求标头识别爬虫,并记录您可以在当天晚些时候使用的匿名cookie。使用关联的UserId解密并删除anon aspnet_profile和aspnet_users记录。

你可能正在打一场失败的战斗,但至少你会清楚地知道所有的交通来自哪里。


AnonymousId cookies和代理匿名个人资料在上次使用后有效期为90天。这可能会导致匿名配置文件堆积起来。

处理此问题的一种非常简单的方法是使用ProfileManager

ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));

将清除过去7天内未访问过的所有匿名配置文件。

但是这会让你在aspnet_Users中找到匿名记录。 Membership不会公开类似于ProfileManager的方法来删除过时的匿名用户。

因此...

最好的选择是原始sql攻击,从aspnet_Profile中删除你认为它们陈旧的地方,然后在IsAnonymous = 1的aspnet_User上运行相同的查询。

祝你好运。一旦你清理干净,就把它放在上面。


更新更新:

以下代码仅在IIS7上有效且如果您通过ASP.Net引导所有请求

您可以实现一个模块,该模块监视robots.txt的请求并获取匿名ID 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


答案 1 :(得分:1)

您可以尝试删除Global.asax.cs文件中Session_End事件中的匿名配置文件。

您的网站很可能被抓取,可能是合法的搜索引擎抓取工具和/或非法抓取工具,寻找可让黑客控制您的网站/服务器的漏洞。无论您采用哪种解决方案来删除旧配置文件,都应该对此进行研究。

如果您使用默认的配置文件提供程序,它将所有配置文件信息保存在一个列中,您可能需要阅读this link,这是Scott Guthrie关于性能更好的基于表的配置文件提供程序的文章。