>백엔드 개발 >PHP 튜토리얼 >PHP에서 IP 액세스 및 제출 시간을 제한하는 방법

PHP에서 IP 액세스 및 제출 시간을 제한하는 방법

墨辰丷
墨辰丷원래의
2018-05-19 13:33:132312검색

이 글에서는 PHP가 클라이언트 IP 주소를 획득하고 판단하는 것과 관련하여 PHP에서 IP 액세스 및 제출 시간을 제한하는 방법과 도움이 필요한 친구가 참고할 수 있는 세션과 결합된 IP 액세스 횟수를 기록하는 등 관련 운영 기술을 주로 소개합니다. 이 기사

이 예에서는 PHP에서 IP 액세스 및 제출 시간을 제한하는 방법을 설명합니다. 참고를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

1. 원칙

제출 횟수는 데이터베이스에 기록되어야 합니다. 예를 들어, 사용자가 로그인할 때, 사용자가 오류가 발생하면 데이터베이스는 오류 수를 기록하는 것을 잊어버리고, 오류가 다시 발생하면 오류 시간을 2로 기록합니다. 5회에 도달하면 내일 다시 시도하세요. 그런 다음 DateDiff를 사용하여 오류와 now() 사이의 시간을 계산합니다. 24보다 크면 다시 시도하게 합니다.

IP를 차단하는 방법은 비교적 간단합니다. 특히 IP를 연결 해제하는 방법은

먼저 IP 세그먼트 개방 상황에 대해 이야기해 보겠습니다. 먼저 설명의 편의를 위해 고객이 접속하는 IP를 꺼내십시오. .168.6.2

이제 IP를 열어야 합니다. 세그먼트는 192.168.*.*입니다. 이해하기 쉬운 코드를 알려드리겠습니다.

url=split(ip,".") '这里的ip为客户端IP
fsip="192.168.*.*"  '允许的段,可以从数据库取出,也可以这么定义
fip=split(fsip,".")
if fip(0)=url(0) and fip(1)=url(1) then
response.write "您的IP被封"
else response.write "可以通过"
end if

사실 IP 차단도 마찬가지입니다. 위의 방법대로. 또는 데이터베이스에서 IP와 클라이언트 간의 직접 비교를 수행하면 됩니다.

일반적으로 데이터베이스의 IP 세그먼트는 배정밀도로 설정되어 있으므로 다음이 필요합니다.

if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
IP=Request.ServerVariables("REMOTE_ADDR")
else
IP=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if
sip=IP
cip=split(ip,".")
ip=256*256*256*cip(0)+256*256*cip(1)+256*cip(2)+cip(3)-1

위의 상황은 모두 데이터베이스 작업과 관련이 있으며 쿠키 등은 포함되지 않습니다.

사실 IP 차단은 그다지 이상적이지 않으며 무고한 사람들에게 영향을 미칠 수 있습니다. 관련 이유는 동적 IP가 탈출하기 때문일 수 있습니다.

2. 캡슐화 예시

<?php
class IP{ //获取客户IP地址
  function getIpAdr(&$ip){
    $ip1=getenv("HTTP_X_FORWARDED_FOR");
    $ip2=getenv("HTTP_CLIENT_IP");
    $ip3=getenv("REMOTE_ADDR");
    if($ip1&&$ip1!=&#39;unknow&#39;)
      $ip=$ip1; else if($ip2&&$ip2!=&#39;unknow&#39;)
      $ip=$ip2; else if($ip3&&$ip3!=&#39;unknow&#39;)
      $ip=$ip3; else
      $ip=&#39;127.0.0.1&#39;;
  }
}
function get_netip($myip){ //只留客户IP地址的前三位
  $temp=explode(".",$myip);
  $netip.=$temp[0];
  $netip.=".";
  $netip.=$temp[1];
  $netip.=".";
  $netip.=$temp[2];
  return $netip;
}
$filename="test.ini";  //定义操作文件
$ip_lib=file($filename); //读取文件数据到数组中
$allow=0;
$IP=new IP;
$thisip="";
$IP->getIpAdr(&$thisip);
$thenetip=get_netip($thisip);
for ($i=0;$i<count($ip_lib);$i++){
  if(ereg($thenetip,$ip_lib[$i])){
    $allow=1;
    break;
  }
}
if ($allow==1)
{
  echo "验证通过";
} else {
  echo "<script>location.href=&#39;Error.php&#39;;</script>";
}

3. 입력 수 제한

1. 페이지에 session_start()가 먼저 필요합니다. 2. 로그인을 클릭할 때 비밀번호가 있는지 판단합니다. 사용자가 입력한 것이 확인되었습니다. 틀렸습니다

if(用户的密码是错误的){
  if(!empty($_SESSION[&#39;login_error&#39;])){
    if($_SESSION[&#39;login_error&#39;] == 3){
      exit("这里已经是第三次了");
    } else{
      $_SESSION[&#39;login_error&#39;] = $_SESSION[&#39;login_error&#39;]++;
    }
  } else{
    $_SESSION[&#39;login_error&#39;] = 1;
  }
}

관련 권장 사항:

IP 액세스 제한 및 제출 횟수 코드 공유의 PHP 구현

IP 액세스 및 제출 횟수 제한 방법 공유 PHP

phpIP주소 범위를 제한하는 방법

위 내용은 PHP에서 IP 액세스 및 제출 시간을 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.