Я нашел конкурс на голосование в своей стране, и после осознания того, что за него получают много голосов (например, 6 тысяч за 4 дня), я пытался удовлетворить свое любопытство по этому поводу, не найдя правильного ответа. .
Это конкурс голосования без капчи, вам просто нужно нажать кнопку «Голосовать». Но в нем есть некоторый JS-код, позволяющий избежать более одного голосования с одного и того же компьютера в час (насколько я мог видеть, IP + cookie), которого, как я думаю, некоторым удалось избежать, и использующий обратный вызов JSON для создания случайного ссылка для подтверждения, которую некоторым людям также удалось бы построить (что позволило бы провести более быстрое голосование):
http://ws.discoverybrasil.com/curiosity/concurso/altaVoto.php?jsoncallback=jQuery164036090815054306025_1321401398889&video=1327&tema=3®ion=2&_=1321401584457
Вот полный JS, вовлеченный в процедуру голосования:
<script>
var TEMA_ELEGIDO = 0;
var DATOS = {};
$(document).ready(function(){
TEMA_ELEGIDO = getQueryVariable('tema','');
mostrar_tema();
detallar_video();
if(typeof(FB)!='undefined') FB.XFBML.parse(); // lanzo el FB JS SDK (viene en los includes de Discovery).
});
function mostrar_tema(){
$.getJSON(APPSERVER+'/listarTemas.php?jsoncallback=?', function(response){
if(!response){ alert('Erro no envio de dados. Tente novamente, por favor.'); return };
if(response.resultado != 1){ alert(response.errormsg); return };
for(var i in response.lista){
if(response.lista[i].id == TEMA_ELEGIDO){
$('#curiosity_tema').html(response.lista[i].titulo);
TEMA_ELEGIDO = response.lista[i].id;
}
}
});
}
function detallar_video(){
var id = getQueryVariable('id');
if(id=='') return;
$.getJSON(APPSERVER+'/detalleContenido.php?jsoncallback=?',{
'id': id
}, function(response){
if(!response){ alert('Erro no envio de dados. Tente novamente, por favor.'); return };
if(response.resultado != 1){
alert('Error: '+ response.errormsg);
return;
}
DATOS = response;
$('#curiosity_usuario').html( (response.nombre+' '+response.apellido).replace('<','') );
$('#curiosity_locacion').html( (response.ciudad+', '+response.pais).replace('<','') );
/^http\:\/\/www.youtube.com\/.*[\?&]+v[=\/]?([\w\d-_]{11})[^&#]*/.test(response.video_link);
if(RegExp.$1 == '') /^http\:\/\/youtu.be\/([\w\d-_]{11})/.test(response.video_link);
var embed = '<object width="854" height="510"><param name="movie" value="http://www.youtube.com/v/'+ (RegExp.$1).replace('<','') +'?version=3&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+ (RegExp.$1).replace('<','') +'?version=3&rel=0" type="application/x-shockwave-flash" width="854" height="510" allowscriptaccess="always" allowfullscreen="true"></embed></object>';
$('#curiosity_video').html(embed);
$('#curiosity_votos').html(response.votos +' votos');
if(!puede_votar(response.id)) inhabilitar_voto();
});
}
function inhabilitar_voto(){
$('#curiosity a.votar').css({opacity:0.3, cursor:'default'}).html('Votado');
}
function votar(){
if(!puede_votar(DATOS.id)){
alert('Você só pode votar 1 vez por hora para cada vídeo.');
return false;
}
$.getJSON(APPSERVER+'/altaVoto.php?jsoncallback=?',{
'video': DATOS.id,
'tema': TEMA_ELEGIDO,
'region': REGION,
}, function(response){
if(!response){ alert('Erro no envio de dados. Tente novamente, por favor.'); return };
if(response.resultado != 1){
if(response.resultado == 2){
alert('Você só pode votar 1 vez por hora para cada vídeo.');
}else{
alert('Error: '+ response.errormsg);
}
$('#curiosity a.votar').animate({opacity:1});
return;
}
recordar_voto(DATOS.id);
inhabilitar_voto();
$('#curiosity_votos').html( (parseInt(DATOS.votos,10)+1) +' votos' );
});
}
function puede_votar(video_id){
var puede = true;
var ahora = (new Date()).getTime();
var votos = (getCookie('votos')).split('&');
if(votos.length > 0){
for(var i in votos){
var pair = votos[i].split('=');
if(pair.length != 2) continue;
if(pair[0] != video_id) continue;
if(parseInt(pair[1]) <= 0) continue;
if( (1000*pair[1])+3600000 > ahora ){ puede = false; break; }
}
}
return puede;
}
function recordar_voto(video_id){
var ahora = (new Date()).getTime() / 1000;
var existente = false;
var votos = (getCookie('votos')).split('&');
if(votos.length > 0){
for(var i in votos){
var pair = votos[i].split('=');
if(pair.length != 2) continue;
if(pair[0] != video_id) continue;
existente = true;
votos[i] = video_id+'='+ahora;
}
}
if(!existente) votos.push(video_id+'='+ahora);
setCookie('votos', votos.join('&'), 365);
}
function ver_mas(){
location.href='galeria.shtml?tema='+TEMA_ELEGIDO;
}
</script>
Итак, мой вопрос: я схожу с ума, или можно заблокировать код, который позволяет избежать более одного голосования на компьютер в час, или сделать случайный обратный вызов JSON, такой как тот, который используется веб-сайтом для прямого голосования (используя Greasemonkey или возможно, построение случайного запроса с использованием Fiddler?) Или я что-то упустил?
Я даже не участвую в конкурсе, который уже заканчивается, но такое большое количество голосов действительно заставило меня задуматься - я действительно сомневаюсь, что у них есть 200 или 300 действительных и быстрых прокси, чтобы голосовать в час, используя инструмент автоматизации (например, iMacros).
Большое спасибо!