簡體   English   中英

使用PHP(Laravel)和MySQL禁止IP,IP范圍,DNS或Agend

[英]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范圍或通配符?

iprange冗余。 單個IP只是起點和終點為相同值的范圍。

我將創建兩個值ip_range_startip_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM