用代码实现屏蔽WordPress指定国家和省份地区用户IP访问

麦子 优化维护3字数 3601阅读12分0秒阅读模式

基于我们有些运维需求,需要屏蔽指定国家和地区的用户IP访问。这里,我们可以用特定的PHP脚本撰写检测指定IP的地区IP,然后通过引用到WordPress嵌入到页面中。这里,麦子整理几个网上采用的方法。后续如果有需要的时候可以一并参考选择用到我们网站中。

1、屏蔽指定国家

  1. <?php
  2. /**
  3. *
  4. * test.php(屏蔽国家IP)
  5. *
  6. */
  7. $verification = '美国';//需要屏蔽国家的IP
  8. function get_client_ip() {
  9. $ip = $_SERVER['REMOTE_ADDR'];
  10. if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {
  11. $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
  12. }
  13. elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
  14. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  15. }
  16. elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
  17. $ip = $_SERVER['HTTP_CLIENT_IP'];
  18. }
  19. return $ip;
  20. }
  21. $ip = get_client_ip();//获取访客IP
  22. $antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
  23. $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
  24. $address = json_decode($result,true);
  25. //判断访客是否属于美国,是否来自百度,是否来自谷歌
  26. if($address['data']['country'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
  27. sleep(10);//设置一个10秒等待。
  28. header('HTTP/1.1 503 Service Temporarily Unavailable');
  29. header('Status: 503 Service Temporarily Unavailable');
  30. header('Retry-After: 3600000');
  31. exit;
  32. }
  33. ?>

这里,我们将代码丢到test.php页面中然后引用到index.php或者是header.php中。

2、屏蔽指定省份

  1. <?php
  2. /**
  3. *
  4. * test.php(屏蔽地方IP)
  5. *
  6. */
  7. $verification = '江西省';//需要屏蔽省份的IP
  8. function get_client_ip() {
  9. $ip = $_SERVER['REMOTE_ADDR'];
  10. if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {
  11. $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
  12. }
  13. elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
  14. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  15. }
  16. elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
  17. $ip = $_SERVER['HTTP_CLIENT_IP'];
  18. }
  19. return $ip;
  20. }
  21. $ip = get_client_ip();//获取访客IP
  22. $antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
  23. $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
  24. $address = json_decode($result,true);
  25. //判断访客是否属于江西省,是否来自百度,是否来自谷歌
  26. if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
  27. sleep(99999999);//设置一个999999秒的等待。
  28. Header("HTTP/1.1 204 No Content");
  29. exit;
  30. }
  31. ?>

3、屏蔽指定访客不跳过搜索引擎蜘蛛

  1. <?php
  2. function get_client_ip() {
  3. if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
  4. $ip = getenv("HTTP_CLIENT_IP");
  5. else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),
  6. "unknown"))
  7. $ip = getenv("HTTP_X_FORWARDED_FOR");
  8. else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
  9. $ip = getenv("REMOTE_ADDR");
  10. else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']
  11. && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
  12. $ip = $_SERVER['REMOTE_ADDR'];
  13. else
  14. $ip = "unknown";
  15. return ($ip);
  16. }
  17. header("Content-type: text/html; charset=utf-8");
  18. $verification = '山东省';//修改省份
  19. $ip = get_client_ip(); //获取当前用户的ip
  20. $antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址
  21. $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。
  22. $address = json_decode($result,true);
  23. if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){
  24. sleep(9999999999999999);
  25. ob_start();
  26. header('HTTP/1.1 503 Service Temporarily Unavailable');
  27. header('Status: 503 Service Temporarily Unavailable');
  28. header('Retry-After: 3600');
  29. echo '网站备案中....';
  30. exit;
  31. }
  32. ?>

根据需要修改对应省份。这个是可以屏蔽对应指定访客地区的,但是不屏蔽蜘蛛。

参考文章:

1、https://www.cnblogs.com/igood/p/4802114.html

2、https://wzfou.com/ip-ku/

投上你的一票
 
  • 本文由 麦子 发表于 2024年11月28日 17:18:07
  • 转载请务必保留本文链接:https://www.zhujipingjia.com/wplimit-area.html
  • WordPress屏蔽地区