【问题标题】:PHP blocking website access by countryPHP按国家/地区阻止网站访问
【发布时间】:2017-06-12 05:36:29
【问题描述】:

由于每天都有过多的恶意点击,我想阻止某些国家/地区访问我的网站。我在这里找到了一个脚本http://azuliadesigns.com/blocking-website-access-country-php/,我可以在其中阻止某个国家/地区访问该网站。这似乎还可以开始。但是在这里,我只能用if($two_letter_country_code=="US") 屏蔽一个国家/地区。

脚本

if ($_SERVER['HTTP_X_FORWARDED_FOR'])
  $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
  $ip   = $_SERVER['REMOTE_ADDR'];

$two_letter_country_code=iptocountry($ip);

function iptocountry($ip)
{
  $numbers = explode( ".", $ip);    

  include("ip_files/".$numbers[0].".php");
  $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);    

  foreach($ranges as $key => $value)
  {
    if($key<=$code)
    {
      if($ranges[$key][0]>=$code)
      {
        $country=$ranges[$key][1];break;
      }
    }
  }

  if ($country=="")
  {
    $country="unknown";
  }

  return $country;
}
if ($two_letter_country_code=="US")
  die();

我的问题是,如果我想阻止从数据库访问这里的多个国家,该怎么办?假设,我在我的数据库中保存了一些国家代码来阻止它们说 US,IN,PK.... 等等,我想阻止对所有这些的访问。在这种情况下,我该如何修改这个脚本才能工作?

我认为应该起作用的:

$country_codes_to_block = $row['block_countries']; // Fetched from database. This will give me the country codes US,IN,PK... etc.

现在修改这一行

if ($two_letter_country_code=="US")

if (in_array($two_letter_country_code, $country_codes_to_block))

这是否会阻止访问其代码存储在数据库中的所有国家/地区?还是我应该做点别的?这个脚本真的有用吗,还是有什么我需要克服的缺陷?我对这些问题感到困惑。请帮帮我...

【问题讨论】:

    标签: php web blocking


    【解决方案1】:

    根据我的经验,应该可以使用in_array()

    if ($two_letter_country_code=="US" || $two_letter_country_code=="UK" )这样的常用方法怎么样?

    【讨论】:

    • 我想将其设置为动态使用,而您正在提供一种切换回手动的方法...如果我想屏蔽 50 个国家/地区怎么办?只是想一想.. 我会在我拥有的所有 25 个 php 页面中放置 50 次吗?请仔细阅读问题,并在您这样做之前三思而后行。无论如何,谢谢您抽出宝贵的时间,伙计:)
    【解决方案2】:
    if ($_SERVER['HTTP_X_FORWARDED_FOR'])
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else
      $ip   = $_SERVER['REMOTE_ADDR'];
    
    $two_letter_country_code=iptocountry($ip);
    
    function iptocountry($ip)
    {   
      $numbers = explode( ".", $ip);
    
      include("ip_files/".$numbers[0].".php");
      $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);    
    
      foreach($ranges as $key => $value)
      {
        if($key<=$code)
        {
          if($ranges[$key][0]>=$code)
          {
            $country=$ranges[$key][1];break;
          }
        }
    
      }
    
    
      if ($country=="")
      {
        $country="unknown";
      }
    
    
    error_reporting(E_ERROR | E_PARSE);
    
    include ("mysqli_connection_file.php");
    $query = "SELECT column_name FROM table_name";
    $result = mysqli_query($conn, $query);
    
    if (!$conn) { die("No Connection was made"); }
    
    while($row = mysqli_fetch_assoc($result)) {
    
        $ccode = $row['name'];
    
    }
    
        foreach ($ranges as $key => $value) {
          $countryset = $ranges[$key][1];
            //echo $countryset."<br />";
    
            if($ccode == $countryset) {
                $time = date('Y-m-d H:i');
                $insert = "INSERT IGNORE INTO logged_table VALUES ('','$ip','$time','IP Blocked','$countryset')";
    
                    if ($conn->query($insert) === TRUE) {} else {
                        echo "Error: " . $sql . "<br>" . $conn->error;
                        die;
                    }
    
                mysqli_free_result($result);
                mysqli_close($conn);
    
    
                echo "<script>alert('Please take a moment to review a very special offer we are running before you review!')</script>";
                echo "<META http-equiv='refresh' content='0; URL=http://www.leapfrog.com'>";
    
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多