Как убедиться, что пользователь может голосовать только один раз в опросе ASP.NET - PullRequest
6 голосов
/ 07 февраля 2009

Я пытаюсь провести опрос ASP.NET (C #), который задаст пользователю вопрос «Да / Нет» и внесет в журнал голосование в базе данных. Чтобы предотвратить спам, я бы хотел, чтобы пользователи могли голосовать только один раз. Я думал о регистрации IP-адреса пользователей. Если это ответ, может кто-нибудь дать мне учебник, который покажет, как это можно сделать. Если это не ответ, то дайте мне свои предложения.

Редактировать: Я не прошу пользователей регистрироваться, так как это не мой сайт.

Ответы [ 8 ]

13 голосов
/ 07 февраля 2009

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

Я вижу эту работу только в среде, где пользователь вложил что-то в свой аккаунт, например, подписчик онлайн-газеты или система репутации в StackOverflow.

4 голосов
/ 07 февраля 2009

Вы не можете ограничить один голос одним IP-адресом. IP-адрес не равен одному пользователю. IP-адрес представляет одного или нескольких пользователей.

4 голосов
/ 07 февраля 2009

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

Если вы говорите о общедоступной и безопасной общедоступной версии, то сам по себе IP-адрес недостаточен (электронное избирательное голосование Google для решения многих вопросов, связанных с безопасным публичным голосованием).

Задумывались ли вы об использовании одной из бесплатных услуг голосования?

Служба интернет-голосования Condorcet

3 голосов
/ 07 февраля 2009

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

Файлы cookie являются частичным решением, но роботы, участвующие в голосовании, просто не могут отправить файл cookie.

2 голосов
/ 07 февраля 2009

Зарегистрированные сеансы являются единственным способом предотвращения мошенничества с двойным голосованием, но, поскольку вы явно запрашиваете способ регистрации IP-адреса, вы можете получить это с помощью:

HttpContext.Current.Request.UserHostAddress;

или

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Должно быть достаточно просто сохранить в БД и проверить, существует ли IP в каждом опросе.

1 голос
/ 07 февраля 2009

У вас должна быть регистрация, требующая подтверждения регистрации по электронной почте, и убедитесь, что адрес электронной почты является уникальным столбцом в БД среди ваших пользователей. Затем свяжите голосование с адресом электронной почты. Это не будет полностью препятствовать марионетке носка с несколькими адресами электронной почты, но, по крайней мере, сделает это не стоящим усилий для большинства.

0 голосов
/ 07 февраля 2009

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

0 голосов
/ 07 февраля 2009

Комбинация IP и useragent может дать вам разумное решение.

...