2009-06-24 11 views
29

Primero de todo, busqué lo mejor que pude y leí todas las preguntas SO que parecen relevantes, pero nada específicamente respondió esto. Esto no es un duplicado, afaik.Cuál es un método confiable para registrar votos de usuarios anónimos, sin permitir duplicados

Obviamente, si se permite la votación anónima en un sitio web, no hay una forma infalible de evitar que alguien vote más de una vez.

Sin embargo, me pregunto si alguien con experiencia puede ayudarme a encontrar una forma razonablemente confiable de rastrear visitantes absolutamente únicos y registrar votos en contra de esas credenciales.

Actualmente estoy garantizando que solo se permite un voto por combinación de elemento/sesión; sin embargo, esto se evita fácilmente reiniciando el navegador, cambiando navegadores/computadoras o borrando los datos de la sesión.

La grabación en IP parece ser la próxima solución razonable, pero me pregunto si esto dará falsos positivos con demasiada frecuencia (varias personas en la misma LAN detrás de una NAT tendrán la misma IP externa, etc.).

¿Hay algún término medio aquí o algún otro método/combinación que tenga en cuenta?

+3

Déjeme expresarlo de esta manera: ¿Desea confirmar que alguien es un individuo específico y único? Eso es autenticación. La autenticación es el opuesto fundamental del anonimato. –

+2

No quiero confirmarlo, solo necesito una mejor "mejor conjetura": los usuarios anónimos son anónimos simplemente porque no los necesito para crear una cuenta. Me refiero a que son huéspedes del sistema, así que sin un user_id cuál es la siguiente mejor información para asociar con su voto para obtener razonablemente cerca de un voto por "usuario" –

Respuesta

21

Recopilaría la mayor cantidad posible de datos sobre la sesión sin hacer preguntas directamente (navegador, sistema operativo, complementos instalados, todos con números de versión, dirección IP, etc.) y los puse en la memoria.

Registre el hash e incremente un contador si desea que se permitan múltiples votos. Incluya una marca de tiempo (diaria, horaria, etc.) en la sal para hacer que los votos sean sensibles al tiempo, digamos 5 votos por día.

+0

Hashing mucha información de usuario es una idea brillante! No quiero una sal basada en el tiempo, ya que actualmente el modelo de votación es un voto arriba/abajo. –

+0

Actualmente estoy implementando este método. Puedo tomar el broswer/OS (como parte de la cadena user-agent) y la IP con php, pero no puedo obtener una lista de complementos sin usar javascript, que un usuario podría modificar, lo que cambiaría el valor de hash y derrotar el propósito de este sistema. Así que espero que IP + user-agent sea lo suficientemente único. –

3

Si no está buscando autenticar a los votantes, entonces obtendrá algunos votos duplicados sin importar cuál sea su uso. Usaría una cookie y habría terminado con los usuarios anónimos.

UserVoice permite votar y votar anónimamente cuando inicia sesión, pero luego permite que el administrador filtre los votos anónimos, una buena solución a este problema.

+0

Soy consciente de que sin la autenticación es imposible garantizar que no duplicados, simplemente estoy buscando una forma de reducirlos. –

10

La respuesta más simple es usar una cookie. Obviamente, es vulnerable a que las personas limpien sus cookies, pero la votación anónima es intrínsecamente aproximada de todos modos.

En la práctica, a menos que el tema que se vote sea de alguna manera controvertido o incendiario, las personas no van a tener un motivo detrás de manipular el voto de todos modos.

IP es más 'confiable' pero producirá un nivel inaceptablemente alto de colisiones debido a los NAT.

¿Qué tal un identificador más único compuesto de IP + user-agent (quizás un hash)? Eso significa efectivamente para cada IP, cada par de versión exacta de OS/navegador obtiene 1 voto, que es mucho más cercano a 1 voto por persona. La mayoría de los navegadores brindan información detallada sobre la versión en el agente de usuario: no estoy seguro, pero mi intuición es que esto evitaría la mayoría de las colisiones causadas por los NAT.

El único lugar que aún produciría muchas colisiones es un entorno corporativo con una red estandarizada, donde todos usan una máquina idéntica.

+1

No es una mala idea. Todavía tendrá algunas colisiones debido a los mismos navegadores (por ejemplo, cada uno en mi red usa la misma versión de Leopard y Safari) pero sería mucho más confiable que solo IP. –

12

Los chinos tienen que compartir una dirección IPv4 con cientos de otras; Hp/Compaq/DEC tiene casi 50 millones de direcciones. IPv6 no ayuda, ya que todos obtienen direcciones por mil millones. Una persona simplemente no es lo mismo que una dirección IP, y esa noción es cada vez más falsa.

No hay formas adecuadas de hacerlo en Internet. Las personas son simplemente un concepto desconocido en Internet, y cualquier idea para introducir el concepto es poco probable que tenga éxito. (Demasiados gobiernos no querrían que esto sucediera, por ejemplo).

Por supuesto, puede relacionar la cantidad de votos por IP con la cantidad de visitas repetidas desde esa IP, especialmente en combinación con el seguimiento de cookies. Esto funciona mejor si estima ese número antes de comenzar el período de votación.Si los artículos populares del 5% superior generalmente se leen 10 veces desde una sola IP, es probable que 10 personas compartan esa IP y obtengan 10 votos. Las cookies se pueden utilizar para evitar que se roben el voto de los demás, pero en general no pueden sesgar su encuesta. (Nota: esto falla en comunidades pequeñas donde un gran grupo de votantes proviene de un pequeño número de IP, en particular, esto sucede en las universidades).

2

Cualquier cosa basada en direcciones IP no es una opción; se ha mencionado el caso de NAT, pero esto parece ser solo en el caso de usuarios domésticos. Hay muchas instalaciones más grandes que usan NAT: algunas empresas pueden tener miles de usuarios agrupados detrás de una sola dirección IP. También hay ISP que usan servidores proxy para sus usuarios, otro caso en el que puede tener miles de usuarios que aparecen en su aplicación como una sola dirección. Agregar combinaciones de UA únicas a esto no ayudará, ya que no hay suficiente variación.

A persistente cookie va a ser su mejor apuesta, y tendrá que vivir con el hecho de que es fácil de jugar. Al menos cuando la cookie es persistente (a diferencia de la sesión), atrapará a la mayoría de los usuarios que ejecutan un único navegador.

Si realmente desea confiar en los resultados, tendrá que agregar algún tipo de identificación en el proceso (como la validación del correo electrónico, que todavía es compatible).

Al final del día, cualquier encuesta en Internet tendrá fallas (como: http://www.time.com/time/arts/article/0,8599,1894028,00.html), y tendrá que vivir con esto.

+0

Sí, puedo vivir con duplicados, pero reducirlos es mejor. Si las personas realmente quieren jugar con el sistema, pueden y lo harán. Esta es solo una medida de reducción –

1

dos ideas que no se mencionan sin embargo son:

  • Solicitud de dirección de correo electrónico del usuario y les envío por correo electrónico un enlace de verificación
  • El uso de un código de imagen

Obviamente, el primero puede ser evitado con el correo electrónico desechable direcciones, etc., pero le da un seguimiento de auditoría y proporciona un obstáculo importante para el relleno de votos casual/bot. Un buen captcha también limita severamente el relleno de votos, pero con todas las advertencias habituales que rodean su uso.

+0

y los usuarios son anónimos no por el anonimato, sino por el bien de la gente. No quiero que rellenen ningún formulario para cada voto o en realidad realmente –

3

utilizar una cookie persistente para permitir que un solo voto por artículo

y registro de la propiedad intelectual, si hay más de 100 (1000? 10000?) Solicitudes en menos de minutos X luego "bloque blando" del IP

El "bloque suave": no muestre una página que diga "su IP ha sido bloqueada" pero muestre su página de "gracias por su voto" y NO grabe el voto en su base de datos. Incluso puede aumentar el contador solo para esa IP. Desea evitar que sepan que está bloqueando su IP.

+0

Estaba haciendo eso anteriormente, pero algo como curl no usa cookies para que puedan jugar los votos simplemente ejecutando curl en un ciclo while. Me conformé con el agente de usuario + combo IP. Nada nunca será 100% sin vincular los votos a algún tipo de registro de usuario, pero parece que ha funcionado lo suficientemente bien. –

0

que tienen el mismo problema, y ​​aquí es lo que estoy planeando hacer ...

establecer una cookie persistente. Verifique la cookie para decidir si se puede emitir un voto en particular. Además, almacene algunos datos sobre la solicitud de voto en forma de una combinación de dirección IP + agente de usuario. Y luego usa este valor para limitar el no. de votos a, digamos, 10 por día.

¿Cuál es la mejor manera de crear este hash (IP + UA String)?

+1

No desea utilizar una cookie. Esa es la forma más fácil de jugar el sistema. Curl y wget no conservarán las cookies, por lo que un simple vistazo a la línea de comando aniquilará por completo cualquier sistema basado en cookies en minutos –

+0

Como mencioné anteriormente, no dependo únicamente de la cookie ... estoy almacenando la dirección IP y la cadena de agente de usuario también en la base de datos, y a partir de ahora estoy permitiendo solo 5 votos por día desde el mismo combo de IP + UA. – Paganwinter

+0

Se necesita atención urgente: "¡Attacker agrega 1 a la versión de su navegador en la UA cada 5 solicitudes y recibe un voto infinito!" Ahora no hay manera de protegerlo adecuadamente sin utilizar un control de identidad "real", o al menos algo que le costaría dinero al atacante, como enviar un código único por SMS. – Shadok

Cuestiones relacionadas