> 백엔드 개발 > PHP 튜토리얼 > PHP는 IP 액세스 및 제출 시간을 제한하기 위해 코드 공유를 구현합니다.

PHP는 IP 액세스 및 제출 시간을 제한하기 위해 코드 공유를 구현합니다.

小云云
풀어 주다: 2023-03-19 22:18:02
원래의
1751명이 탐색했습니다.

이 글에서는 PHP가 클라이언트의 방문 IP를 획득하고 판단하는 과정과 세션과 결합된 IP 액세스 횟수를 기록하는 등 관련 작업 기술을 포함하는 PHP에서 IP 액세스 및 제출 시간을 제한하는 방법을 주로 소개합니다. 필요한 친구들은 참고해서 모두에게 도움이 되었으면 좋겠습니다.

1. 원칙

제출 횟수는 데이터베이스에 기록되어야 합니다. 예를 들어 사용자가 로그인할 때 사용자가 오류를 범하면 데이터베이스는 오류 수 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;
  }
}
로그인 후 복사

관련 권장 사항:

PHP IP 액세스 제한 지정된 IP 액세스만 허용 * 와일드카드 필터 허용 IP_PHP 튜토리얼

위 내용은 PHP는 IP 액세스 및 제출 시간을 제한하기 위해 코드 공유를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿