>  기사  >  백엔드 개발  >  동일한 IP의 여러 제출을 제한하는 PHP 솔루션

동일한 IP의 여러 제출을 제한하는 PHP 솔루션

巴扎黑
巴扎黑원래의
2018-05-30 09:31:252729검색

이 글에서는 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 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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