我想实施一个禁令系统。首先,我将创建一个过滤器,确保禁止的用户被重定向到一个页面,通知他们禁令。 我使用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范围或通配符?
答案 0 :(得分:3)
ip
对range
是多余的。单个IP只是一个范围,其中start和end是相同的值。
我会创建两个值,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
答案 1 :(得分:2)
规范化您的数据结构。 JSON是您的(关系?)数据的一部分,因此将IP保存为IP,将范围保存为范围,并对其进行查询。
因此,您可以检查数据类型(在您的数据库中)。这确实意味着您必须检查所有这些类型的OR(ip = xxxx或dns = yyy或ip-inragne(zzz),但这是给定的:)