2015-12-19 14 views
2

У меня есть сайт, на котором пользователи могут публиковать и голосовать за сообщения. Очень важно, чтобы гостевые пользователи голосовали за сообщение, а также очень важно избегать нескольких голосов от одного и того же гостя.Как запретить гостевым пользователям дважды голосовать за сообщение?

Cookies, могут быть легко удалены, поэтому это не может быть решением.

IP, очень плохо, если вы рассматриваете ситуации с NAT.

Так что я думаю, мне нужен более продвинутый способ, возможно, другой тип печенья ..?

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

+1

Вы не можете остановить это. Вы можете сделать все возможное, чтобы попытаться ограничить это. –

+0

Вы можете использовать отпечаток пальца, хотя это также не является надежным. Если вы хотите быть абсолютно уверенным, вы должны реализовать настоящий механизм аутентификации. – Pointy

+1

Попробуйте использовать это - https://github.com/samyk/evercookie –

ответ

2

Что вы можете делать только в том случае, если вы не вошли в систему для пользователей - это сделать как можно больше, чтобы они могли голосовать во второй раз. Например, вы можете:

На стороне клиента:

  • набор печенья
  • информация записи в хранилище браузера
  • используют так называемые флэш печенье

На стороне сервера - магазин и проверьте как можно больше информации о пользователе:

  • магазин пользователя IP (включая прокси внутрибрюшинно и т.д.)
  • магазин браузера отпечатков пальцев
  • магазин пользователя часовой пояс
  • блок для голосования по этому внутрибрюшинно и браузер отпечатков пальцев (постоянно или в течение некоторого времени).

т.д.

Но вы до сих пор не может остановить умные и действительно хочет обмануть анонимных пользователей от голосования.

Таким образом, может быть более полезным не пытаться блокировать голосование, а вместо этого определять и игнорировать «дублированные» голоса (т.голосов за ту же опцию из одной и той же комбинации ip и браузера в течение определенного периода времени можно считать «обманутым»).

+0

Просто интересно, если вы знаете какую-либо библиотеку, которая абстрагирует эти методы, перечисленные вами, чтобы идентифицировать пользователя, желательно на PHP. Действительно помогло бы. Я думаю, что это должно быть довольно распространенным требованием для людей. – ggat

+0

@ Гига, к сожалению, я не знаю такой библиотеки. Но, по моему опыту, я могу сказать, что хранение комбинации заголовков ip и браузера работает хорошо (есть небольшие шансы, что два пользователя на одном ip имеют одинаковый заголовок браузера). –

+0

И, как вы сказали, для повторной фильтрации голосов, это было бы легко обмануть, если пользователь будет вручную создавать HTTP-запросы и изменяет значения UA. – ggat

0

Да, единственное полусовершенное решение - отслеживать IP-адреса. Вы можете хранить их в таблице навсегда или кэшировать их в течение определенного периода времени в Memcache или аналогичном. Конечно, если пользователи вошли в систему, лучшим способом является просто проверить, проголосовал ли пользователь или нет.

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

0

Если пользователь является анонимным и не нуждается в аутентификации, вы не можете предотвратить это.

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

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