黑白名單:PHP實現IP黑白名單過濾

來源:互聯網
上載者:User

    需求來自一個營運的同事,對一個php檔案執行進行IP過濾,不方便直接設定管理員,於是需要直接在php檔案開頭進行IP的過濾。
    IP過濾規則,可以有如下形式:
    1.完整的IP地址 如:192.168.0.1 
    2.某一段IP 如:192.168.0.* 。
    營運可以自訂IP黑白名單,由多個IP過濾規則群組成,儲存在數組中。通過編寫代碼,實現IP黑白名單功能。一個比較簡單的需求。
    首先實現一個函數,功能是判斷ip是否符合某個ip過濾規則:
   
function ip_test($ip,$iprule){
$ipruleregexp=str_replace('.*','ph',$iprule);
$ipruleregexp=preg_quote($ipruleregexp,'/');
$ipruleregexp=str_replace('ph','\.[0-9]{1,3}',$ipruleregexp);
if(preg_match('/^'.$ipruleregexp.'$/',$ip)) return true;
else return false;
}
    實現了ip_test這個核心函數後,下面的過程就簡單多了,無非就是簡單的遍曆名單中的每條規則,判斷當前串連的IP是否符合規則,並進行對應的步驟。
     白名單,當IP至少滿足一條規則時繼續執行操作
    
$curr_ip=$_SERVER['REMOTE_ADDR'];
$white_list=array(...); //白名單規則
$test_success=false;
foreach($white_list as $iprule){
if(ip_test($curr_ip,$iprule)){
$test_success=true;
break;
}
}
if(!$test_success) exit('IP not in white list');
     黑名單,當IP不滿足所有規則時繼續執行操作
    
$curr_ip=$_SERVER['REMOTE_ADDR'];
$black_list=array(...); //黑名單規則
foreach($black_list as $iprule){
if(ip_test($curr_ip,$iprule)){
exit('IP in black list');
}
}
     就這樣,一個簡單的PHP實現的IP黑白名單過濾就完成了。這篇部落客要是給那些主業務不是開發的人員,如:支援人員、營運等。由於太簡單,原本不想寫,後來那個同事感謝我幫忙,對我說這個他在網上找了很久,都沒有找到合適的解決方案,我就想說不定這個還真有人需要呢。   本文連結http://www.cxybl.com/html/wlbc/Php/20130326/37394.html

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。