繁体   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