»

利用淘宝IP地址数据库屏蔽来自一些国家或地区的访问

    WordPress网络安全  
访问web.config网络安全建站CDN的问题客户申请状态又拍云CDNwordpress爬虫windows主机网站优化Apache浏览器cookiesIIS插件CDN工作防盗链网站镜像FAQWordPress插件访客缓存

网站有时候遇到蜘蛛或者个别国家ip的恶意骚扰、攻击,怎么办呢?对于前者,也就对于守规矩的蜘蛛,那么我们可以通过向 robots.txt 文件中添加规则来限制、禁止其爬取,但对于那些恶意蜘蛛或 IP,robots.txt 显然不适用了。有些人使用插件来屏蔽一些地区的 IP,但是很多插件中对地区/国家的屏蔽是收费的。我这里说一种不用插件、不收费的方法。用此方法可以不让一些国家或一些地区的人/蜘蛛浏览或爬取你的网站。  

WordPress平台中,将以下代码保存在php文件中,文件名自定,比如 blocked.php,上传到网站根目录:

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. $verification1 = '乌克兰'; //需要屏蔽的国家
  4. $verification2 = '北京市'; //需要屏蔽的地区
  5. $ip = $_SERVER['REMOTE_ADDR'];// 获取访客IP
  6. $antecedents = $_SERVER['HTTP_REFERER']; // 访客来路地址
  7. $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip); // IP数据库来自淘宝。
  8. $address = json_decode($result,true);
  9. //判断访客是否属所设置地区或国家
  10. if($address['data']['country'] == $verification1 || $address['data']['region'] == $verification2){
  11.         echo "网站维护中。。。";
  12.         exit();
  13. }
  14. ?>

然后在 wp-config.php中添加一句: require_once(ABSPATH . 'blocked.php');     当然,这样的输出结果 http 返回状态码是200,如果我们想自定义状态码,怎么弄呢? 可将

  1. echo "网站维护中。。。";
  2. exit();

替换成:

  1. sleep(999999999); // 设置一个时间为999999秒。空白页,经历漫长的等待时间后才能打开。
  2. Header("HTTP/1.1 204 No Content");

    或者将

  1. echo "网站维护中。。。";
  2. exit();

替换成:

 
  1. header('HTTP/1.1 403 Forbidden');
  2. header('Status: 403 Forbidden: Access is denied');
  3. echo "You do not have permission to view this directory or page using the credentials you supplied.";
  4. exit();

  其他返回代码可以自行搜索一下相关文章。 需要提醒的是,淘宝有一点限制:每个用户的访问频率需小于10qps 。 对于经过 CDN 的网站,该方法可能并不适用,请在 CDN 服务商那里设置有关 Referrer 或 ip 的参数。你也可以通过js代码来实现,这里不多说了。

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 1302字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →