2010-01-29 8 views
5

¿Cuáles son algunos ejemplos de código que puedo usar para evitar que las personas emitan votos y darles una calificación más alta al hackear el script php?¿Cómo detener a las personas de secuestrar un sistema de votación con PHP?

+1

Uhm, no entiendo la pregunta. Seguramente la secuencia de comandos se ejecuta en un servidor al que los usuarios no tienen acceso, ¿verdad? Es decir, no deberían tener acceso al script php real, solo poder llamarlo. –

+2

Tendrá que entrar en mucho, mucho más detalle que eso, mi amigo. :) –

Respuesta

4

La primera línea de defensa es una galleta.

Básicamente, configura la cookie en su máquina y deshabilita la votación, si está presente.

setcookie('cookiename', 'voted=1'); 

// and later 

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    // error 
} 

Esto elimina una llamada a la base de datos que pueda necesitar para validar su voto. Es una buena idea mantener esto en su lugar, porque es como el almacenamiento en caché: los pocos ingresan en la base de datos, mejor.

La segunda línea de defensa es la limitación de IP. Básicamente verificará si hay un registro de dirección IP en su base de datos y verá si votaron recientemente.

mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

// and later 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    // error 
} 

Volviendo toda su script en algo en la línea de

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1") 
{ 
    die("You have voted recently."); 
} 

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"'); 

if(mysql_num_rows($results) != 0) 
{ 
    die("You have voted recently"); 
} 

//Do Voting Stuff Here 
vote($_GET['vote']); 

// Record the vote. 
setcookie('cookiename', 'voted=1'); 
mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")'); 

También tendrá que agregar en los tiempos de expiración y tal, pero el jist básica de que está ahí.

+0

Nota: Es probable que desee restablecer la cookie si encuentra en la base de datos que han votado recientemente. –

3
  1. Set cookies para ya votadas usuarios y no permitir que voten por algún tiempo.

  2. Junto a la protección de cookies, agregue protección de dirección IP. La dirección IP única puede votar solo una vez por un período de tiempo. Una buena alternativa para la protección de IP es la protección mediante un esquema combinado (ip + user_agent + ...).

  3. Pídales a los usuarios que ingresen captcha cuando están haciendo acciones demasiado rápido.

+1

Por cierto, no necesita mantener todo el registro de ip. Mantenga el registro solo durante la última 1 hora, sería incluso más que suficiente. – Kirzilla

2

Un par de ideas:

  1. Utilice un CAPTCHA de
  2. dirección
  3. registro IP (de acuerdo con su política de privacidad, por supuesto)
1

La única manera de evitar que lo hagan es tener un buen sistema de autenticación de usuario. Salvo eso, puede desalentarlo mediante el uso de cookies y Captcha.

Cuestiones relacionadas