删除搜索引擎蜘蛛生成的会话

时间:2014-05-09 20:01:24

标签: asp-classic

我有一个经典的ASP Web应用程序,它将用户会话信息存储到数据库表中。这个特定网站不断受到搜索引擎蜘蛛和其他机器人的攻击,我相信这主要归功于它的域名。我正在存储每个用户的IP地址,其中许多我可以追溯到俄罗斯和乌克兰的来源,这可能是坏消息。

无论如何,我想让我的桌子不要填满非实际用户的记录。因为机器人不接受cookie,所以应用程序并没有意识到它是相同的"用户"一遍又一遍,并不断写出新的记录。

我不知道我可以即时识别这些机器人并且根本不会在桌面上写下记录。据我所知,所有ASP cookie测试都涉及多个文件,所以我可能无法在会话脚本的上下文中执行此操作。

我的下一个想法是,当同一IP地址出现X次时,只需删除表中的记录。我知道一些互联网提供商共享IP地址。但如果我要说的话:

从表格中删除(重复的IP地址数量)> 100

那会合理安全吗?假设在这个网站上永远不会有来自同一IP地址的100个用户维护会话?

我愿意接受有关其他方法的建议。

谢谢!

2 个答案:

答案 0 :(得分:3)

好吧,每个浏览器都会发送一个唯一的用户代理字符串,因此每个机器人或蜘蛛都会发送。

您可以针对公共关键字数组检查该字符串,以获得几乎可靠的标识:

Function IsBotOrSpider()
    Dim arrBots, strUserAgent, x
    IsBotOrSpider = False
    arrBots = Array("bot", "spider", "crawler", "indexer", "archiver", "slurp", "http://")
    strUserAgent = Request.ServerVariables("HTTP_USER_AGENT")
    For x=0 To UBound(arrBots)
        If InStr(LCase(strUserAgent), LCase(arrBots(x)))>0 Then
            IsBotOrSpider = True
            Exit Function
        End If
    Next
End Function

拥有此功能,您可以在每个请求中检查bot / spider,如果是,则不存储会话:

If IsBotOrSpider() Then
    'do not store session, this is not a human visitor
Else  
    'human visitor ahead, deal properly
End If

如果您希望几乎100%安全,您可以获取机器人代理字符串列表here

答案 1 :(得分:1)

您说在创建cookie之前创建了session。好吧,如果BOT无法存储此cookie,为什么在创建会话之前不测试cookie?

如果cookie存在,则仅创建会话:

<% if len(Request.Cookies("cookieName"))>0 then %>

这是我的第一个想法。如果我找到更好的东西,我会多思考一下并编辑它。