2010-04-08 14 views
6

Solo he escrito algunas pequeñas aplicaciones web de php y ahora estoy lanzando código para permitir que los usuarios envíen historias cortas. estas historias se mostrarán y permitirán que otros las voten. El ganador recibe algo bastante valioso y soy gente paranoica que tratará de manipularlo.Creación de una aplicación web PHP para permitir a los usuarios votar en presentaciones: cómo puedo minimizar el abuso

Debian/Apache/PHP 5.2/jquery

usuarios no están obligados a iniciar sesión/autenticar.

usuarios pueden votar múltiples pisos de altura, pero sólo una vez para cada historia

¿Es tan simple como el etiquetado de cada historia con una dirección IP y sin contar otras presentaciones desde esa IP? Gracias por cualquier consejo.

Respuesta

9

No, no es tan sencillo. Es bastante fácil falsificar las direcciones IP y las personas pueden votar desde varios lugares. Además, es muy probable que haya diferentes personas/computadoras conectadas usando la misma dirección IP. Es incluso (muy) posible que diferentes personas intenten votar usando la misma computadora (y navegador).

Incluso un sistema de inicio de sesión no es resistente al agua: simplemente no puede verificar las identidades de las personas. Los usuarios pueden ingresar diferentes direcciones de correo electrónico y datos falsos como nombres y fechas de nacimiento.

Por otro lado, si quieres una identificación única de un navegador determinado en un equipo determinado (frente a los usuarios únicos ), echar un vistazo a Panopticlick y leer Browser Fingerprints – How Unique Is Your Browser – Panopticlick.

Aparte de esto, puede (intentar) utilizar una cookie para identificar un navegador con el que se ha emitido un voto.

+0

+1! Buscando el botón +10. –

+1

+1. Me gustó las referencias. Pero no estoy seguro acerca de la confiabilidad de esta "técnica de huellas dactilares", debido a las actualizaciones frecuentes y frecuentes de software. – Dor

+0

@Dor: buen punto acerca de las actualizaciones, aunque supongo * que los usuarios de Internet * regulares * no actualizan con frecuencia. –

1

No, la dirección IP no es un buen identificador. Alguien que navega desde, por ejemplo, un teléfono móvil nunca puede tener la misma dirección IP (e incluso los usuarios domésticos pueden cambiar su dirección IP regularmente).

Por otro lado, varias personas que navegan desde el servidor misma casa/oficina/proxy serían bloqueadas por el método de

0

La mejor cosa a hacer sería tratar de almacenar la información en 2 lugares:

  1. almacenar la dirección IP del usuario junto con su voto y la historia de una tabla de base de datos, y haciendo una comprobación cada vez que se intente votar para ver si ya tienen o no
  2. Ponga una cookie en el navegador del usuario para intentar hacer un seguimiento de lo que votaron. Suponiendo que no quiere almacenar una tonelada de datos, simplemente puede asignar una ID a la cookie e igualarla en la tabla mencionada anteriormente, y hacer una comprobación de esa manera.

La combinación de los dos métodos juntos debería permitirle saber quién ha votado y para qué, sin dejar que alguien vote por segunda vez. Por supuesto, si van a varias máquinas, eliminan la cookie y/o cambian su IP, no hay nada que pueda hacer para detener eso.

5

Puede armar una base de datos de perfiles de usuario. Así que extrae cierta información de usuario, como IP, navegador, ubicación, versión del sistema operativo, etc. etc. Y luego crea un sistema estándar de concordancia o ponderación que elimine a las personas si son "demasiado sospechosas"."Sí, todavía obtendrás falsos positivos aquí y allá, pero si eres tan paranoico como dices que se trata de legitimidad, probablemente sea mejor ir un poco por la borda en la validación. Para obtener mejores resultados, siempre regresa un "éxito" mensaje de modo que ellos piensan que están el sistema de juego y no tratar de encontrar la manera de vencer él.

1

con php se puede obtener la dirección IP y el agente de usuario de su navegador como así

IP: $_SERVER['REMOTE_ADDR']

Agente de usuario: $_SERVER['HTTP_USER_AGENT']

lamentablemente no es la manera perfecta, pero minimiza el abuso.

Puede reforzar esto utilizando un sistema de inicio de sesión y almacenando lo que la persona ha votado utilizando cookies. pero incluso entonces todavía no es perfecto.

0

Esto es lo que he hecho en el pasado:

  • Compruebe si hay galletas
  • dirección IP
  • cheque dentro de la ventana de tiempo
  • Si bien, conjunto de cookies y actualización de la dirección IP y la hora (aumentan ventana de tiempo para ese IP?)
  • siempre trate de dar la impresión de que los usuarios voto consiguió contó

es imposible atrapar toda estafa mers, aún más si se trata de votación anónima.

3

Debe utilizar un sistema de validación dual, si decide no implementar una interfaz de inicio de sesión/contraseña. Nada es perfecto, pero creo que con el sentido común puedes establecer algo bueno.

  1. Comience con las cookies. Solo guarde algunas cookies con datos como, story_id, datetime y un tiempo de expiración definido. De esa forma, si esa máquina ya votó, no podrá votar nuevamente durante un período de tiempo, digamos 24 horas.

  2. Tenga una tabla de DB con una lista de todas las direcciones IP que votaron por las diferentes historias. Entonces, cuando alguien está votando, simplemente verifique si esa IP está en la lista para esa historia en particular. Esa tabla también debería tener una columna adicional para guardar cuántos intentos se realizaron desde esa IP. Si la IP se encuentra en la lista, y la cookie no está definida, entonces alguien ya ha votado usando esa IP, los escenarios posibles para esto son:

    • Tal vez ellos están en una casa y todos ellos son de votación.
    • Tal vez están en una oficina, y todos votan desde diferentes máquinas.
    • Quizás estén en una red pública, como una cafetería o un aeropuerto.

    En cualquiera de esos casos normales, es muy raro que un IP intente votar más de 20 veces para la misma historia. Debe establecer un umbral de "inicio muchas veces el mismo IP puede votar". Entonces, si no hay cookies, y la cantidad de veces que un IP ha votado está por encima de su umbral, entonces usted sabe que algo está mal y le da a ese IP un tiempo de espera más largo o incluso puede bloquearlo por completo del proceso de votación.

  3. Utilice un captcha.No hagas que sea muy fácil votar, pero tampoco lo hagas con dificultad. Incluso con las formas previamente mencionadas de validar su sistema, también puede poner un captcha para forzar al usuario a pensar/escribir algo antes de hacer clic en "enviar". Se puede utilizar algo tan molesto como re-Captcha (http://recaptcha.net/) o una amigable busca uno como m-código de imagen (http://code.google.com/p/m-captcha)/. De esta manera, un hacker tendría un momento doloroso tratar de anular las medidas de seguridad.

2

de forma única la identificación de los votantes

  1. Tener un código de imagen fuerte (como reCAPTCHA) que impide los intentos automatizados. Esto bloquea falsificados IPS y bots.
  2. tienda un identificador en una cookie. Esto ayuda a las personas de agarre en mismo equipo y navegador con diferir de ent IP.
  3. Almacene la IP en el servidor. Esto ayuda a atrapar a las personas con múltiples computadoras o navegadores en la misma red doméstica. Desafortunadamente, esto también puede impedir que todos, excepto Bob, voten en la gran planta de GM en la calle. Diles que voten desde casa.

No se preocupe por el agente de usuario si está verificando por IP desde arriba. Es redundante

Si sigue las tres pautas, también puede actualizar los votos en tiempo real porque no puede descalificar ningún voto que supere los criterios anteriores. Probablemente ni siquiera deberías mostrar el botón de votar si no pueden votar, a menos que vayas a dejar que la gente cambie sus votos, lo cual también es una buena idea si hay entradas tardías.

Si estuviera votando, me gustaría poder votar una historia inmediatamente después de leerla, y si encuentro una historia que me gusta más, me gustaría poder cambiar mi voto.

Sistema de votación

Ahora, con respecto a la votación, es posible que desee requerir votos en al menos tres cuentos diferentes de la misma "persona" antes de contar los votos. Tendrás más posibilidades de que la historia más popular termine siendo la ganadora de esa manera.

Por ejemplo, si envío el enlace a todos mis amigos para votar por mi historia, también tendrán que elegir otras historias, probablemente las mejores. Existe la posibilidad de que la peor película termine ganando, ya que la gente podría votar por los peores dos y la suya para obtener el voto, sin embargo, en la práctica, nunca lo he visto. Esto se basa en 7 años de festivales de cine que usan este sistema.

Además, para un concurso de Internet, es absolutamente crucial que todos tengan el mismo tiempo en la parte superior de la página, por lo que debe encontrar alguna forma de rotar, o al menos aleatorizar, las entradas.

Ponga siempre algo en las reglas del concurso sobre los jueces que tienen la última palabra.

Cuestiones relacionadas