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

时间:2015-01-12 15:58:54

标签: php mysql json

我想实施一个禁令系统。首先,我将创建一个过滤器,确保禁止的用户被重定向到一个页面,通知他们禁令。 我使用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范围或通配符?

2 个答案:

答案 0 :(得分:3)

iprange是多余的。单个IP只是一个范围,其中start和end是相同的值。

我会创建两个值,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

答案 1 :(得分:2)

规范化您的数据结构。 JSON是您的(关系?)数据的一部分,因此将IP保存为IP,将范围保存为范围,并对其进行查询。

因此,您可以检查数据类型(在您的数据库中)。这确实意味着您必须检查所有这些类型的OR(ip = xxxx或dns = yyy或ip-inragne(zzz),但这是给定的:)