Siempre es lo mismo, la depuración de aplicaciones que hago es automática, cuando visito un sitio web no puedo evitarlo, es como cuando un diseñador gráfico 3D ve una película de animación, o un programador de videojuegos prueba la última creación de una empresa, …no podemos disfrutar del producto al mismo nivel que alguien «normal» , porque lo analizamos inconscientemente.
En este caso analicé anoche Badoo,una web de contactos escrita en AJAX y conseguí una única línea en JavaScript con la que puedes hacer un robot para votar a todas las personas sin restricciones de ningún tipo aprovechando un bug…
El ritmo que se consigue de votación es cada vez más vertiginoso a medida que voy obteniendo nuevos métodos para saltar de un perfil a otro hasta que consigo dar con un objeto en el árbol DOM que está conectado a toda la estructura y al que se le puede llamar directamente.
En esta web se captura el click en cualquier sitio, de forma que sólo permite el evento click en los objetos registrados, así pueden controlar la actividad completa de un usuario, la línea que permite acceder al evento click sería
$e._handlers.cl.meet_yes[0](el)
donde $e es un objeto que guarda todos los manejadores y enlaces a los objetos, _handlers todos los manejadores, cl las funciones que manejan los objetos de la interfaz registrados y meet_yes el conjunto de botones «Sí | Quizás | No», si se sigue la traza del sí perfilando la web con el profiler de firebug encontramos que finalmente llama a la función vote que es lo único que nos interesa, ya que no tiene sentido regenerar el evento click ya que necesitaríamos construir un objeto válido con los parámetros del botón necesarios (que no se especifican) por lo que podría costarnos mucho trabajo así que llamamos a la votación indicándole que el objeto DOM es el botón «Sí»:
MeetMe.vote(document.getElementsByClassName(«meet_yes»)[0])
Ahora podemos embeber dicha línea dentro de una función para hacerla compatible con el modo de trabajar con prototipos de JavaScript:
function votar() {MeetMe.vote(document.getElementsByClassName(«meet_yes»)[0])}
y nuestro robot sería tan sencillo como este:
setInterval(«votar()»,1000);
cada segundo vota, así podeis dejarlo,si tenéis una mejor conexión podeis reducirlo a la mitad, recomiendo poner 5 segundos y meter el setInterval dentro de la función, podéis usar el fichero de ejemplo hacks_badoo.js
Supongo que arreglarán este bug…
que me comeeeeeeeeeeeeeentas
Para el Badoo de Noviembre 2010 las líneas son:
——
function votar(){MeetMe.vote(document.getElementsByClassName(«js_yes»)[0]); setTimeout(«votar()»,2000);};
votar();
…….
Vamos que sólo han cambiado el nombre de la clase CSS :D