Что является надежным методом для записи голосов от анонимных пользователей, не позволяя дубликаты

Это можно сделать и с помощью рекурсивной функции в bash.

Пусть F - функция, которая отображает время файла, которое должно быть лексикографически сортируемым, гггг-мм-дд и т. Д. (Зависит от ОС?)

F(){ stat --format %y "$1";}                # Linux
F(){ ls -E "$1"|awk '{print$6" "$7}';}      # SunOS: maybe this could be done easier

R рекурсивная функция, которая запускается через каталоги

R(){ local f;for f in "$1"/*;do [ -d "$f" ]&&R $f||F "$f";done;}

И, наконец,

for f in *;do [ -d "$f" ]&&echo `R "$f"|sort|tail -1`" $f";done
32
задан David Wheaton 7 May 2012 в 06:20
поделиться

7 ответов

Я бы собирал как можно больше данных о сеансе, не задавая никаких вопросов напрямую (браузер, ОС, установленные плагины, все с номерами версий, IP-адресом и т. Д.) И хэшировал их.

Запишите хэш и увеличьте значение счетчика, если вы хотите, чтобы было разрешено несколько голосов. Включите метку времени (ежедневно, ежечасно и т. Д.) В соль, чтобы сделать голосование чувствительным ко времени, скажем, 5 голосов в день.

22
ответ дан 27 November 2019 в 20:42
поделиться

Если вы не собираетесь проверять подлинность избирателей, то вы получите несколько дублированных голосов независимо от того, что вы используете. Я бы использовал куки-файл и покончил с ним для анонимных пользователей.

UserVoice позволяет как анонимное голосование, так и голосование при входе в систему, но затем позволяет администратору отфильтровывать анонимные голоса - хорошее решение этой проблемы.

3
ответ дан 27 November 2019 в 20:42
поделиться

Самый простой ответ - использовать cookie. Очевидно, что это уязвимо для людей, очищающих свои файлы cookie, но анонимное голосование в любом случае является приблизительным.

На практике, если тема существо не ставится на голосование в некотором роде спорный или воспалительный, люди не собираются иметь мотив за фальсификации результатов голосования в любом случае.

IP является более «надежным», но будет производить неприемлемо высокий уровень столкновений вследствие NATs .

Как насчет более уникального идентификатора, состоящего из IP + user-agent (может быть, хеша)? Это фактически означает, что для каждого IP-адреса каждая конкретная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

В любом случае у t будет мотив для фальсификации голосования.

IP более «надежен», но будет вызывать недопустимо высокий уровень конфликтов из-за NAT.

Как насчет более уникального идентификатора, состоящего из IP + user-agent (может быть, хеш)? Это фактически означает, что для каждого IP-адреса каждая конкретная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

В любом случае у t будет мотив для фальсификации голосования.

IP более «надежен», но будет вызывать недопустимо высокий уровень конфликтов из-за NAT.

Как насчет более уникального идентификатора, состоящего из IP + user-agent (может быть, хеш)? Это фактически означает, что для каждого IP-адреса каждая конкретная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

но приведет к неприемлемо высокому уровню коллизий из-за NAT.

Как насчет более уникального идентификатора, состоящего из IP + user-agent (возможно, хеша)? Это фактически означает, что для каждого IP-адреса каждая конкретная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

но приведет к неприемлемо высокому уровню коллизий из-за NAT.

Как насчет более уникального идентификатора, состоящего из IP + user-agent (возможно, хеша)? Это фактически означает, что для каждого IP-адреса каждая конкретная пара версий ОС / браузера получает 1 голос, что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

что намного ближе к 1 голосу на человека. Большинство браузеров предоставляют подробную информацию о версии в пользовательском агенте - я не уверен, но мне кажется, что это предотвратит большинство коллизий, вызванных NAT.

Единственное место, где по-прежнему может возникать множество коллизий, - это корпоративная среда со стандартизированной сетью, где все используют одинаковые машины.

11
ответ дан 27 November 2019 в 20:42
поделиться

Что-либо, основанное на IP-адресах, не является вариантом - упоминался случай NAT, но, похоже, это только в случае домашних пользователей. Есть много более крупных установок, использующих NAT - в некоторых корпорациях тысячи пользователей могут объединяться за одним IP-адресом. Есть также интернет-провайдеры, которые используют прокси-серверы для своих пользователей - еще один случай, когда вы можете иметь тысячи пользователей, которые отображаются в вашем приложении как один адрес. Добавление к этому уникальных комбинаций UA не поможет, так как вариантов недостаточно.

Постоянный cookie будет вашим лучшим выбором - и вам придется смириться с тем фактом, что легко играть. По крайней мере, когда cookie является постоянным (в отличие от сеансового), вы поймаете большинство пользователей, которые используют один браузер.

3
ответ дан 27 November 2019 в 20:42
поделиться

Две идеи, которые еще не упомянуты:

  • Запрос адреса электронной почты пользователя и отправка ему ссылки для подтверждения
  • Использование капчи

Очевидно, что первое можно обойти с помощью одноразовой электронной почты адреса и т. д., но дает вам контрольный журнал и создает существенное препятствие для случайного набивки голосов / ботов. Хорошая капча также сильно ограничивает подтасовку голосов, но со всеми обычными оговорками, связанными с ее использованием.

1
ответ дан 27 November 2019 в 20:42
поделиться

Китайцы должны использовать один IPv4-адрес совместно с сотнями других; У Hp / Compaq / DEC почти 50 миллионов адресов. IPv6 не помогает, поскольку все получают адреса миллиардами. Человек - это не то же самое, что IP-адрес, и это представление становится все более ложным.

В Интернете просто нет подходящих способов сделать это. Люди - это просто понятие, неизвестное в Интернете, и любая идея представить это понятие вряд ли удастся. (Например, слишком многие правительства не захотят, чтобы это произошло.)

Конечно, вы можете связать количество голосов на IP-адрес с количеством повторных посещений страницы с этого IP-адреса, особенно в сочетании с отслеживанием файлов cookie. Лучше всего это работает, если вы оцените это число до начала периода голосования. Если первые 5% популярных статей обычно читаются 10 раз с одного IP-адреса, вероятно, 10 человек разделяют этот IP-адрес, и они должны получить 10 голосов. Файлы cookie могут использоваться для предотвращения кражи голосов друг друга, но в целом они не могут исказить ваш опрос. (Примечание: это не работает в небольших сообществах, где большая группа избирателей приходит из небольшого числа IP-адресов, в частности, это происходит вокруг университетов).

12
ответ дан 27 November 2019 в 20:42
поделиться

Используйте постоянный файл cookie, чтобы разрешить только один голос для каждого элемента

и записать IP-адрес, если более 100 (1000–10 000?) Запросов менее чем за X минут затем «мягкая блокировка» IP

«Мягкая блокировка»: не показывать страницу с сообщением «ваш IP заблокирован», но показывать страницу «спасибо за голос» и НЕ записывать голосование в базу данных. Вы даже можете увеличить счетчик только для этого IP. Вы хотите, чтобы они не узнали, что вы блокируете их IP.

3
ответ дан 27 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: