#php
#php
Вопрос:
Я управляю веб-сайтом на PHP, который выдает вознаграждение посетителям. Уже существует ограничение в один IP-адрес за 24 часа, но нам нужно расширить это ограничение до одного IP на диапазон в час. В настоящее время мы можем видеть до тридцати IP-адресов в одном диапазоне, претендующих на вознаграждение.
У меня есть результат базы данных по IP-адресам, просмотренным за последний час, и у меня есть текущий IP-адрес пользователя.
Мне интересно, знает ли кто-нибудь хорошую функцию для использования или имеет свою собственную, чтобы сравнить, принадлежит ли текущий IP-адрес пользователя сети, которую видели за последний час. С тем же IP-адресом, указанным ниже, мы хотели бы сравнить и вернуть true, если 1, 2 и 3 совпадают.
Пример IP 1.2.3.4 (совпадение по 1, 2 и 3 вернет true. Полное совпадение уже проверено.)
Если мы получим совпадение, вознаграждение не выплачивается, и пользователю придется вернуться позже. Я предполагаю, что сетевые администраторы используют свои ресурсы для получения вознаграждений с нашего сайта, что несправедливо по отношению к другим, которые хотели бы принять участие.
Комментарии:
1. Я могу получать новый IP-адрес каждую минуту, отключая кабель переменного тока от моего маршрутизатора. -> забудьте об ограничении вашего IP, используйте аутентификацию пользователя
2. Хранит ли ваша база данных IP-адреса в виде строк или 32-разрядных целых чисел?
3. Кроме того, один и тот же IP-адрес может использоваться разными посетителями, и все они должны иметь право требовать цену. Сосредоточьтесь на пользователе, а не на IP-адресе.
4. Если два разных посетителя используют одну и ту же подсеть, то вы наказываете кого-то, кого не должно быть. Если Боб находится в Майами у провайдера ComCants с IP 78.33.12.221, а Алиса также является подписчиком ComCants с IP 78.33.12.69, тогда что? Попытка забанить кого-либо по IP бесплодна и в конечном итоге не будет хорошим решением.
5. Вероятно, у меня есть IP-адрес парня через дорогу. Должны ли мы считаться одним и тем же человеком, несмотря на то, что он ….?
Ответ №1:
Хорошо, поскольку все были слишком заняты, говоря, как глупо это делать, вместо того, чтобы ответить на вопрос, я отвечу на него сам. Просто предположите, что у нас есть веские причины для этого, а не я трачу время на объяснение наших причин!
Я взял локальный IP-адрес и превратил его в массив, используя функцию explode.
$ipArray = explode(".", $ip, 4);
Затем я удалил последнюю запись.
array_pop($ipArray);
Затем я перебрал внешние IP-адреса, если таковые имеются, и проделал то же самое с каждым из них.
$exArray = explode(".", $exIP, 4);
array_pop($exArray);
Наконец, все, что мне нужно было сделать, это сравнить два массива.
if ($ipArray == $exArray) { return true; }
Возможно, есть более простой способ сделать это, но у нас он хорошо сработал. Мы потеряли награды, которые были на нашем сайте, из-за очень немногих сетевых администраторов, которые использовали свои ресурсы для удаления нашего сайта. Отключение и повторное подключение вашего маршрутизатора для нового IP-адреса ничто по сравнению с тем, что люди получают 200 вознаграждений всего за несколько секунд.
Вот полный используемый код. https://github.com/Bushstar/applebyte-faucet/commit/643bcd2111378bd6d1b2da34357290bd1d4136ae
Комментарии:
1.
Valid Reason : Reputation 15