快两年没动代码了,最近自己弄了一个站玩。
有些资料老被火车头拖来拖去的。
求一个完整的防火车头采集的功能模块。
自己弄了半天 思路是这样的比如在某一个时间段ip多次请求 就把该ip禁止掉,没搞好
如有需要我可以贴出我写的整个代码流程。
有些资料老被火车头拖来拖去的。
求一个完整的防火车头采集的功能模块。
自己弄了半天 思路是这样的比如在某一个时间段ip多次请求 就把该ip禁止掉,没搞好
如有需要我可以贴出我写的整个代码流程。
<?php
$ipLog='ipLogFile.txt'; // Your logfiles name here
$timeout='1'; // How many hours to block IP
$goHere='Allowed.html'; // Allowed pages name here$register_globals = (bool) ini_get('register_gobals');
if ($register_globals) $vis_ip = getenv(REMOTE_ADDR);
else $vis_ip = $_SERVER['REMOTE_ADDR'];
function recordData($vis_ip,$ipLog,$goHere)
{
$log=fopen("$ipLog", "a+");
fputs ($log,$vis_ip."][".time()."\n");
fclose($log);
// The below header function was causing errors in apache
//Header ("Location: $goHere"); exit(0);
/*echo "<script>location.replace('$goHere')</script>"; exit(0);*/
}
function checkLog($vis_ip,$ipLog,$timeout)
{
global $valid; $ip=$vis_ip;
$data=file("$ipLog"); $now=time(); foreach ($data as $record)
{
$subdata=explode("][",$record);
if ($now < ($subdata[1]+3600*$timeout) && $ip == $subdata[0])
{
$valid=0;
echo "You have been banned from accessing this page. Try again in $timeout hours.";
exit;
break;
}
}
} checkLog($vis_ip,$ipLog,$timeout);
if ($valid!="0") recordData($vis_ip,$ipLog,$goHere); ?>
这个功能很好做, 封一个函数, 每个页面顶部包含一下就行了.这个函数干什么呢?$_SERVER得到IP, 然后memcache原子加法给它计数+1, 如果超过10就header个403.为什么用memcache呢? 因为它自身就是支持了生命期控制, 比如设置一个20秒的生命期,100次访问限制。效率高,还简单,唯一的问题是memcached实现造成的,就是你原子更新一次数值,它的生命期就又满了,这可能造成一个悲剧的现象,就是用户保证每20秒内都有访问,但频率很低,最终就被403了,可以适当的缩短生命期,比如10秒来减小这个问题带来的影响。
是否能帖一段代码 供参考下?
如不存在则视为非法入侵
如存在(采集程序也会模拟键机制),记录和检查请求中的内容唯一键是否呈现列表页的排序规则
如有 3 个以上符合,则视为非法入侵
2,COOKIE不同。针对这种正常用户,应该设计白名单,也就是很普遍的思想,黑中有白,白中有黑。坏人用IP限制,好人用SESSION放,就这么简单,其他更多复杂的判定可以自己考虑加进去,比如注册时间久,活跃的老用户,允许他频率稍高一些。登录用户比未登录用户要稍高一些。就说你的,说实话COOKIE这个东西不可信,但可以拿来减少误杀也不错了。IP频率超出限制,则检查SESSION,根据SESSION里记录的访问频率和访问记录放行,但你要知道坏人借助你这个软弱的判定,就会不提交COOKIE,所以我说SESSION里记录“访问记录”也很重要。误杀再所难免,绝大多数时候需要人工封号与解封,需要借助COOKIE和SESSION追踪更多的用户行为,比如用JS在页面里定时AJAX提交访问记录,鼠标轨迹,当然有COOKI UID标记用户唯一身份,单纯依赖服务端判定太难了,一会就把用户赶走了。
我模拟没一个爬虫一个ip 每个ip在一分钟之内访问超过10个页面就封ip 正常情况下爬虫没这么勤快的。我的内容本身的特点相当于一行一个页面 一般采集的人会访问上千个页面。所以用工具还不如人工复制,真人工复制的话,你懂的 我没办法做到完全屏蔽的 ,除非我让我网站打不开 你就是神也没办法 哈哈!