[英]Ban IP, IP range, DNS or Agend with PHP (Laravel) and MySQL
我想實施禁令制度。 首先,我將創建一個過濾器,以確保將被禁止的用戶重定向到通知他們該禁止的頁面。 我使用Laravel和MySQL作為數據庫。 我的桌子看起來像這樣:
id, ip , range, dns, agent, reason, endofban
或像這樣
id, rule, reason, endofban
reason
可能是這樣的JSON字符串:
{ "ip": "123.22.12.*" }
{ "dns": "malicious.dns.com" }
{ "range": "123.22.12.0 - 123.22.14.0" }
最后一個的優點是更緊湊,但是我不知道是否有一種快速方法可以根據訪問者的信息檢查JSON。 我不想從數據庫中獲取所有內容,然后執行for
循環以確保沒有規則返回正數。 我想在數據庫中進行檢查。 每次加載頁面時都必須執行此操作,因此必須快速。 你怎么看? 還有其他解決方案嗎? 另外,如何在MySQL中檢查IP范圍或通配符?
ip
與range
冗余。 單個IP只是起點和終點為相同值的范圍。
我將創建兩個值ip_range_start
和ip_range_end
。 代替存儲字符串,將IP地址存儲為整數(即INET_ATON()
的結果)。 然后,當您運行查詢時,您可以說:
SELECT *
FROM AccessDenyList
WHERE INET_ATON('192.0.2.115') BETWEEN ip_start_range AND ip_end_range
規范化您的數據結構。 JSON是您(關系型?)數據的一部分,因此將IP保存為IP,將范圍保存為范圍,然后查詢該范圍。
因此,使數據類型可以檢查(在數據庫中)。 這確實意味着您必須針對所有這些類型使用OR進行檢查(ip = xxxx OR dns = yyy或ip-inragne(zzz),但這是給定的:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.