IP白名單的實現(PHP)

2022-07-02 17:42:12 字數 1849 閱讀 9109

有些專案可能會用到乙個ip位址的白名單黑名單之類的驗證。

比如,只有ip位址在白名單中,才可以訪問該系統。

那麼此時,白名單的維護,一般是乙個檔案,裡邊是一些ip位址(每行乙個ip),當然也有的可能是用資料庫記錄白名單。

當然,即使放在資料庫中記錄(方便管理),也可以在後台根據資料庫生成ip白名單的配置檔案,每次更新白名單時,都根據資料庫資料,重新寫一下白名單的配置檔案。

一般常見的兩種情況:一種是白名單檔案中的所有ip都是完整的,另一種是有的ip是有範圍的(帶.*)

一、每乙個ip都是完整的ip

1 127.0.0.0

2 192.168.1.1

3 192.168.1.2

4 192.168.1.30

5 123.200.20.200

6 123.101.21.201

以上假設就是ip白名單。

此時的思路是,從檔案中讀取所有ip位址寫入乙個陣列,每行就是乙個元素。

然後判斷當前ip是否在這個陣列中。這樣就實現了這個ip是不是在白名單的驗證。

這種實現,比較簡單。

1 function white_ips($file)

2 12 }

13 fclose($f);

14 }

15 return $a;

16 }

$file是ip白名單檔案的儲存位置和檔名,其中會過濾掉注釋的ip,同時也會過濾掉多餘的空白和換行。避免意外出錯。

1 $arr = getwhiteips('white_ips.conf');

2 $ip = '192.168.1.1';

3 $allow = 0;

4 if (in_array($ip, $arr))

7 echo $allow;

通過這樣呼叫和判斷,就可以知道當前的ip是否在白名單了。

二、第二種情況是白名單配置檔案中是有範圍的

1 127.*.*.*

2 10.*.*.*

3 192.168.*. *

4 192.168.1.1

5 123.200.20.200

6 123.101.21.201

7 210.10.22.*

8 210.123.135.*

9 #30.11.22.33

10 #119.123.2.15

以上是假設ip白名單的檔案內容

此時的思路是,從檔案中讀取所有ip位址寫入乙個陣列,每行就是乙個元素。

然後通過迴圈的方式,將當前ip和陣列中的每一條資料進行比較(匹配),如果匹配上則白名單,否則不是。

此時因為有範圍,所以不能使用in_array這種簡單的判斷了。需要使用正則來判斷。

讀取白名單配置檔案的**不變,改變判斷方法即可。

1 function checkip($ip, $rule)

2 ', $rule_regexp);//將臨時符號替換成正規表示式

6 if(preg_match('/^' . $rule_regexp . '$/', $ip))else

11 }

12 13 $arr = getwhiteips('white_ips.conf');

14 $ip = '192.168.1.';

15 $allow = 0;

16 foreach ($arr as $rule)

21 }

22 echo $allow;

這種有範圍的驗證,稍微複雜一點,需要逐一比對判斷。利用正則匹配ip後,結束迴圈。

php檔案白名單 php實現ip白名單黑名單功能

這個是乙個檢測ip是否非法的php函式,適應於白名單,黑名單功能開發,主要場景應用於 api 限制,訪問限制等.複製 如下 安全ip檢測,支援ip段檢測 param string ip 要檢測的ip param string array ips 白名單ip或者黑名單ip return boolean...

php檔案白名單 php實現ip白名單黑名單功能

這個是乙個檢測ip是否非法的php函式,適應於白名單,黑名單功能開發,主要場景應用於 api 限制,訪問限制等.安全ip檢測,支援ip段檢測 param string ip 要檢測的ip param string array ips 白名單ip或者黑名單ip return boolean true ...

IP白名單的實現(PHP)

有些專案可能會用到乙個ip位址的白名單黑名單之類的驗證。比如,只有ip位址在白名單中,才可以訪問該系統。那麼此時,白名單的維護,一般是乙個檔案,裡邊是一些ip位址 每行乙個ip 當然也有的可能是用資料庫記錄白名單。當然,即使放在資料庫中記錄 方便管理 也可以在後台根據資料庫生成ip白名單的配置檔案,...