1. Через куки выставляете флаг, что он уже голосовал.
2. На сервере - записывайте IP и блокируйте на 6 часов.
3. На сервере каждые 24 часа отсеивайте (нормализуйте показатель) "накрутку": когда средняя периодичность оценки материала (например, 1 час) значительно превышает исследуемый интервал (т.е. голосовали часто; например, каждые 5 секунд на протяжении любого промежутка времени). Т.е., ищем явное (более 20-30% от среднего) среднестатистическое модульное отклонение среднего интервала оценки в сегменте (временном интервале) голосов с высокой частотой. Нормализуем к одному голосу и обновляем показатель.
В целом - всё..
PS: Есть более сложные варианты реализации с fingerprint2, evercookie и аналитикой просмотров и переходов (всё в совокупности).
PS2:
1. Геоблок - т.е. учитывать только определённые страны/регионы по IP-адресу (добавил
Скворцов - Спасибо!)
2. PROXY-чекер: проверка пакета на содержание PROXY-заголовков. Разумеется, только transparent-proxy, т.е. не анонимные, которые передают реальный IP.