Как я могу сохранить IP-адрес для сравнения, не раскрывая его? - PullRequest
0 голосов
/ 02 марта 2011

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

  • Чтобы предотвратить манипулирование голосованием на общедоступном веб-сайте, достаточно ли сравнить IP-адреса на равенство?

  • В целях прозрачности / проверки я хотел бы разрешить пользователям загружать данные голосования. Поэтому я должен подходящим образом хешировать IP-адреса. Какой метод хеширования вы предлагаете и почему?

Ответы [ 6 ]

1 голос
/ 02 марта 2011

Сравнение публичных IP-адресов будет недостаточно.Вы разрешите только один голос из нескольких стран и корпораций, имеющих один внешний IP-адрес.

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

  • Если пользователи вошли в систему, голосование привязано к входу в систему,
  • , если не установлен cookie-файл браузера.
  • Не разрешать голоса с одного и того же IP + тот же cookie-файл с очень высокой скоростью.
  • Поставьте капчу, если голоса приходят с очень высокой скоростью с одного и того же IP.

Для анонимизации IP просто сделайте хеш IP с ключом.

1 голос
/ 02 марта 2011

В прошлом я проводил некоторые голосования и использовал IP в качестве уникального ограничения.Недостатком является то, что люди могут делиться публичным IP.

Вы можете объединить cookie и IP.Все зависит от важности голосования, если люди обманывают.

0 голосов
/ 02 марта 2011

Хеширование с помощью публичной соли, очевидно, не делает IP-адреса частными (их всего 4 миллиарда, их легко перевернуть).

Так что вам нужно держать соль в секрете, и в этот момент она становится ключевой. Таким образом, вместо хеширования вы можете использовать симметричное шифрование, так как AES также является секретным ключом. И не будет существенной разницы. За исключением того, что вам немного проще (у кого есть ключ) отменить шифрование, чем отменить хеш.

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

0 голосов
/ 02 марта 2011

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

Тогда ваши мысли верны, проверка IP, сохраните IP-адрес в одной таблице с хешем.

// Verify in the table if this IP visitor exists

 ...
$ip = $_SERVER['REMOTE_ADDRESS'];

if ($ip == $row['ip']) {

   if (sha1($ip) === '$row[shaip]') {
       echo "You have already give a vote.";
   }
} 
else {

   // Start the process here
   $ip = "$_SERVER['REMOTE_ADDRESS']";
   $shaip = sha1($ip); // the own IP

   // Here inputs IP and HASH in your table
   mysql_query("INSERT ...");

   // Here fetch the data to comparison
   mysql_query("SELECT ...");
}
0 голосов
/ 02 марта 2011

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

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

Также следует понимать, что, позволяя ip голосовать один раз, вы позволяете людям, находящимся за NAT или прокси, голосовать один раз. Это может означать, что целая компания может голосовать только один раз. Вам нужно подумать, приемлемо ли это для вас.

0 голосов
/ 02 марта 2011

Чтобы предотвратить манипулирование голосованием на общедоступном веб-сайте, достаточно ли сравнить IP-адреса на равенство?

Это не позволит многим людям, находящимся за шлюзами NAT, голосовать один разкто-то за воротами проголосовал.Вы действительно хотите это сделать?

...