[英]How can I use multidimensional arrays in PHP with MySQL-based sessions?
[英]How do I use a PHP/MySQL-based script to ban IP blocks from a website?
我有一個相當大的IP和IP塊列表,我想禁止它。 我所擁有的列表是以塊的形式完成的,目前采用以下格式:
1.2.3.4-1.2.3.54
5.6.7.8-5.6.7.8
2.3.4.5-2.3.4.116
我試圖通過某種方式將它們放入MySQL數據庫中來找到阻止這些IP的最有效方法。 當然,我可以將所有塊分成單獨的IP並將它們放在自己的MySQL記錄中,但是對於大量的IP來說這將是非常低效的。 阻止整個范圍,例如“1.2.3。*”也會導致不必要地禁止大量用戶。
有沒有辦法有效地做到這一點?
我會有這樣一張桌子:
range | start_number | end_number
------+--------------+-----------
這將保持(例如): 1.2.3
, 4
,和54
分別。
然后,您可以輕松檢查連接的IP地址是否在該范圍內,以及最后一部分是否在start_number
和end_number
之間。
您可以使用MySQL INET_ATON()和INET_NTOA()函數。 請記住這些是特定於MySQL的,但您也可以使用php實現它們。
這些函數將點地址表示法中的IP地址轉換為整數。 然后,您可以將它們存儲在包含“start_ip”和“end_ip”列的表中。 當您查詢是否禁止IP時,可以使用BETWEEN查詢。
SELECT * FROM bans WHERE INET_ATON("127.0.0.1") BETWEEN start_ip AND end_ip
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.