この記事では、PHP でのクライアント IP アドレスの取得と判断を含む、PHP での IP アクセスと送信回数を制限する方法と、セッションと組み合わせた IP アクセス回数の記録などの関連操作テクニックを主に紹介します。この記事
この例では、PHP で IP アクセスと送信時間を制限する方法を説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
1. 原則
たとえば、ユーザーがログインしたとき、ユーザーが投稿を行ったとき、送信数がデータベースに書き込まれる必要があります。エラーの場合、データベースはエラーの回数を 1 に書き込み、エラーが 5 回に達すると、それ以上ログインを許可しないことを示すメッセージが表示されます。次に、DateDiff を使用してエラーと now() の間の時間を計算します。それが 24 より大きい場合は、再試行させます。
IP をブロックすること、特に IP を切断することは比較的簡単です。
まず IP セグメントを開く状況について説明します。説明の便宜上、最初に IP が存在します。 192.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
上記の状況はすべてデータベース操作に関するものであり、Cookie などは関係しません。
実際、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!='unknow') $ip=$ip1; else if($ip2&&$ip2!='unknow') $ip=$ip2; else if($ip3&&$ip3!='unknow') $ip=$ip3; else $ip='127.0.0.1'; } } 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='Error.php';</script>"; }
3. 入力数を制限する
1. ページには最初に session_start() が必要です 2. パスワードが必要であると判断された場合は、ログインをクリックするときに判断します。ユーザーが入力した内容は間違っています
if(用户的密码是错误的){ if(!empty($_SESSION['login_error'])){ if($_SESSION['login_error'] == 3){ exit("这里已经是第三次了"); } else{ $_SESSION['login_error'] = $_SESSION['login_error']++; } } else{ $_SESSION['login_error'] = 1; } }
以上が同じ IP の複数の送信を制限する PHP ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。