由机器人发送垃圾邮件的 CodeIgniter 会话

Posted

技术标签:

【中文标题】由机器人发送垃圾邮件的 CodeIgniter 会话【英文标题】:CodeIgniter Session spammed by bots 【发布时间】:2013-12-03 08:55:38 【问题描述】:

我有一个每天大约有 2000 名访问者的网站,该网站充斥着各种搜索引擎机器人的垃圾邮件。我尝试将会话过期时间减少到 20 分钟,但我仍然得到很多 mysql_slow_queries。所以我正在查看文章Google crawler, cron and codeigniter sessions,以完全忽略 会话表中的机器人,但他们的做法是,忽略 IPs,但在我分析数据库时我看到同一个机器人使用不同的IPs。我注意到机器人每次都使用相同的用户代理,那么忽略用户代理是否安全?有哪些必要步骤可以避免查询缓慢并忽略机器人?

一些慢查询

INSERT INTO `ci_sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES ('619bfd8ef4171480645feb17a15323ee', '219.92.135.144', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15', 1384875135, '')

INSERT INTO `ci_sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES ('fa48b5168b8e84d90dc9b87ce65dfc89', '66.249.74.112', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)', 1384875522, '')

【问题讨论】:

这个机器人是否忽略了你的 robots.txt?然后,您应该在防火墙级别阻止它,以防止它占用任何 cpu 资源,即使它仍然会阻塞带宽。 对不起,我应该提到,我只是想从会话表中忽略它,而不是从抓取网站。 我有点好奇为什么每天只有 2k 用户,你的插入速度很慢?我有一个大容量站点( 我也不确定。通常是在某个时间范围内,通常是在早上(美国时区),也就是大量机器人爬过网站的时间。而且我通常会看到ci_session 的开销,我必须每天优化该表。我也对它们进行了索引。不知道发生了什么。 【参考方案1】:

/config 中编辑您的user_agent.php,并添加您在会话中看到的机器人,将它们添加到机器人部分应该可以消除会话记录。

// There are hundreds of bots but these are the most common.
$robots = array(
    'googlebot'     => 'Googlebot',
    'msnbot'        => 'MSNBot',
    'baiduspider'   => 'Baiduspider',
    'bingbot'       => 'Bing',
    'slurp'         => 'Inktomi Slurp',
    'yahoo'         => 'Yahoo',
    'askjeeves'     => 'AskJeeves',
    'fastcrawler'   => 'FastCrawler',
    'infoseek'      => 'InfoSeek Robot 1.0',
    'lycos'         => 'Lycos',
    'yandex'        => 'YandexBot'
);

您可以减少机器人的数量,但不会消除它们。此用户代理进程可用于创建 MY_session.php,然后为匹配机器人的代理排除会话创建。

编辑: 我继续在 github 上创建了它并在此处记录:http://blog.biernacki.ca/2014/01/codeigniter-keeping-bots-out-of-your-sessions-table-or-how-i-cleaned-up-my-sessions/

享受

【讨论】:

抱歉,我不确定会话如何忽略机器人,因为在核心会话类中我看不到任何关于会话忽略的信息。或者你是在告诉我扩展这个类并且如果它是一个机器人就忽略它? 好吧,我继续为您创建了插件,请参阅我的更新答案。 非常感谢 =) 感谢您为帮助我而采取的额外步骤 =) 很好的回应!一个愿望:请在你的 git 库中将 My_Session.php 重命名为 MY_Session.php。否则它不适用于小写 - 看起来 CI 根本不加载文件。【参考方案2】:

如果您想完全阻止机器人,也许可以尝试使用robots.txt?如果您只想忽略正在创建的会话,那么检查用户代理中的“GoogleBot”之类的字符串可能是一个不错的解决方案。但我认为,您需要扩展 Session 类才能做到这一点。

【讨论】:

对不起,我的意思是,把它从 Sessions 表中屏蔽掉。是的,所以您认为通过 ips 阻止用户代理更好? 这是一个难题 - GoogleBot 更改 IP,但很长时间没有更改用户代理中的“GoogleBot”字符串 :) 所以看起来检查用户代理更可靠

以上是关于由机器人发送垃圾邮件的 CodeIgniter 会话的主要内容,如果未能解决你的问题,请参考以下文章

如何防止机器人发送垃圾邮件?不和谐.py

我如何 DM 将直接消息放入公共频道而不发送垃圾邮件的机器人

如何防止机器人发送垃圾邮件? |抽搐.py |不和谐.py

Discordbot 读取 DM 消息并记录它们

防止机器人向您的博客发送垃圾邮件的最佳方法是啥?

如何更正使用 codeigniter 发送电子邮件的方式