Объяснить выбор такого решения - PHP

D
На сайте с 28.06.2008
Offline
1101
247

Лет 7 назад мне для моего сайта был написан плагин, который читает логи и записывает в базу IP, которые слишком часто обращаются к тем или иным разделам сайта. Если кол-во обращений от них переваливает лимит, им высвечивается капча.

Сейчас я уже подучил php и переписываю этот сайт на свой движок. Дошел до этого плагина и не могу понять почему была выбрана такая логика.

Структура таблицы

CREATE TABLE `blacklist_items` (
  `id` int(11) NOT NULL,
  `created` datetime NOT NULL,
  `ip_start` bigint(20) NOT NULL,
  `ip_stop` bigint(20) NOT NULL,
  `cap` smallint(1) NOT NULL DEFAULT 0,
  `whitelist` smallint(1) NOT NULL DEFAULT 0,
  `a` int(11) NOT NULL DEFAULT 0,
  `b` int(11) NOT NULL DEFAULT 0,
  `c` int(11) NOT NULL DEFAULT 0
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

код в нее записывающий

        if(!empty($data))
        {
            foreach($data as $index => $value)
            {
                if($value > 10)
                {
                    $sql[] = "(NOW(), INET_ATON(".$this->db->quote($index)."), INET_ATON(".$this->db->quote($index)."), ".$this->db->quote($value).")";
                }
            }
        }
        if(!empty($sql))
        {
            $this->db->query("INSERT INTO `blacklist_items` (created, ip_start, ip_stop, a) VALUES ".implode(', ', $sql)." ON DUPLICATE KEY UPDATE created = VALUES(created), a = VALUES(a)");
        }

код проверяющий

        $db->setQuery("SELECT COUNT(id) FROM `blacklist_items` WHERE whitelist = 0 AND cap = 0 AND ip_start >= INET_ATON(" . $db->quote($ip) . ") AND ip_stop <= INET_ATON(" . $db->quote($ip) . ") LIMIT 1");
        $count = $db->loadResult();

Непонятен мне следующий момент - зачем было заводить два поля ip_start и ip_stop и писать туда одинаковые значения? Да и потом поиск делать так неоптимально.

Я чего-то недогоняю или он (кодер это написавший) сперва хотел делать поиск по диапазонам IP, но потом отказался от этого и не стал переписывать?


WS
На сайте с 01.11.2008
Offline
135
#1
Dram :

Лет 7 назад мне для моего сайта был написан плагин, который читает логи и записывает в базу IP, которые слишком часто обращаются к тем или иным разделам сайта. Если кол-во обращений от них переваливает лимит, им высвечивается капча.

Сейчас я уже подучил php и переписываю этот сайт на свой движок. Дошел до этого плагина и не могу понять почему была выбрана такая логика.

Структура таблицы

код в нее записывающий

код проверяющий

Непонятен мне следующий момент - зачем было заводить два поля ip_start и ip_stop и писать туда одинаковые значения? Да и потом поиск делать так неоптимально.

Я чего-то недогоняю или он (кодер это написавший) сперва хотел делать поиск по диапазонам IP, но потом отказался от этого и не стал переписывать?


могу предположить, что в базу записывается не только в этом месте, но и в других, например то, что вы привели выполняется налету, а потом ещё, по крону например делается запрос IP WHOIS, выясняется диапазон, к которому принадлежит айпишник, и в базу уже записывается диапазон, поищите в других файлах, возможно есть какой-то кроновский скрипт, который это делает или например есть ещё какая-то shutdown функция, в которой это зашито

L
На сайте с 10.02.2015
Offline
221
#2
Чтобы можно было банить подсети 

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий