Hace ya algún tiempo LNOL permite a los usuarios del sitio efectuar la valoraciones en los comentarios de las notas sin necesidad de estar autenticado en el sistema.
Para evitar que los usuarios abusen del sistema LNOL utiliza un control basado en cookies, un metodo probadamente inutil, que solo detiene a usuarios poco calificados tecnicamente.
Pero lamentablemente este sistema es aun mas sencillo de vulnerar dado que se puede saltar incluso el control de la cookie y votar N veces sin mayores problemas.
Debemos creer que al no ser un sistema critico, quizas LNOL prefiere asumir el riesgo de que terceros lo burlen en pos de la facilidad a la hora de votar
Como funciona?
Al pie de cada nota hay varios links:
El codigo HTML de estos links es el siguiente:
Cada comentario se indentifica con un ID en este caso la funcion panelVotar utiliza el ID 4081449 correspondiente a ese comentario.
Si vemos la funcion javascript:panelVotar(comentarioId,usuarioId,bX3,valorTipo_id)
Vemos una linea comentada:
1: /*if(valorCookieLogin != "") {//el usr esta logueado*/
Que da paso libre a votar sin necesidad de encontrarse logueado.
A continuacion actualiza la cookie cookieComentariosVotados, donde guarda la lista de IDs votados separados por pipes y luego invoca la funcion computarVoto
1: if(actualizar)
2: 170 {//no habia votado anteriormente => actualizo la cookie.
3: 171 document.cookie = "cookieComentariosVotados="+ valorCookie + comentarioId + "," + valorUsuarioId + "|;expires="+fecha.toGMTString() + "; path=/";
4: 172
5: 173 //Computo el voto en BD.
6: 174 computarVoto(comentarioId,valorUsuarioId,valorTipo_id);
7: 175 }
computarVoto envia el voto al servidor de LNOL mediante un request a una pagina ASP.
1: function computarVoto(comentarioId,usuarioId,valorTipo_id)
2: {
3: var url;
4:
5: url = "/Scripts/VotarComentario.asp?comentario_id="+ comentarioId + "&user_id=" + usuarioId + "&valorTipo_id=" + valorTipo_id;
6: var xmlHttp;
7: try
8: {
9: // Firefox, Opera 8.0+, Safari
10: xmlHttp=new XMLHttpRequest();
11: }
12: catch (e)
13: {
14: // Internet Explorer
15: try
16: {
17: xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
18: }
19: catch (e)
20: {
21: try
22: {
23: xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
24: }
25: catch (e)
26: {
27: alert("Your browser does not support AJAX!");
28: return false;
29: }
30: }
31: }
Es decir que puedo colocar la URL en un browser y votar a gusto:
http://www.lanacion.com.ar/Scripts/VotarComentario.asp?comentario_id=4081449&user_id=valorTipo_id=2
Donde valorTipo_id indica el tipo de voto 1-Positivo y 2-Negativo. Dado que el control en base a la cookie se realiza por medio de javascript, solo en ela pagina de la nota, no es necesario eliminar cookieComentariosVotados en cada request efectuado a VotarComentarios.asp. Por lo tanto generar votos duplicados se reduce a copiar la URL a un navegador y pesionar F5 tantas veces como votos se desean.