由机器人发送垃圾邮件的 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 会话的主要内容,如果未能解决你的问题,请参考以下文章