2010-01-29 11 views
5

Quali sono alcuni esempi di codice che è possibile utilizzare per impedire alle persone di trasmettere voti per attribuire loro una valutazione più elevata mediante l'hacking dello script php?Arrestare le persone dal dirottare un sistema di votazione usando PHP?

+1

Uhm, non capisco la domanda. Sicuramente lo script è in esecuzione su un server a cui gli utenti non hanno accesso, giusto? Cioè, non dovrebbero avere accesso allo script php effettivo, solo essere in grado di chiamarlo. –

+2

Dovrai entrare in molti, molti più dettagli di questo, amico mio. :) –

risposta

4

La prima linea di difesa è un biscotto.

Fondamentalmente, si imposta il cookie sul proprio computer e si disabilita il voto se è presente.

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

// and later 

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

Questo si libera di una banca dati chiamata che potrebbe essere necessario effettuare al fine di convalidare il loro voto. È una buona idea tenerlo a posto, perché è come fare il caching: meno utenti colpiscono il database e meglio è.

La seconda linea di difesa è IP limitante. Fondamentalmente controlleresti un registro degli indirizzi IP nel tuo database e vedrai se hanno votato di recente.

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 
} 

Trasformare il vostro intero script in qualcosa sulla falsariga di

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().'")'); 

Dovrete anche aggiungere nei tempi di scadenza e simili, ma il jist base di esso è lì.

+0

Nota: probabilmente vorrai reimpostare il cookie se trovi sul database che hanno votato di recente. –

3
  1. Impostare i cookie su utenti già votati e non consentire di votare per un po 'di tempo.

  2. Oltre alla protezione dei cookie, aggiungere la protezione dell'indirizzo IP. Un singolo indirizzo IP può votare solo una volta per un certo periodo di tempo. Una buona alternativa per la protezione IP è la protezione combinata (ip + user_agent + ...).

  3. Chiedi agli utenti di inserire captcha quando stanno facendo azioni troppo veloci.

+1

Btw., Non è necessario mantenere l'intero registro IP. Tenere il registro solo per l'ultima ora: sarebbe ancora più che sufficiente. – Kirzilla

2

Un paio di idee:

  1. Utilizzare un CAPTCHA
  2. indirizzo
  3. Record IP (in conformità con la vostra politica sulla privacy, ovviamente)
1

L'unico modo per impedirgli di farlo è avere un buon sistema di autenticazione utente. Salvo che, si potrebbe scoraggiare utilizzando i cookie e Captcha.

Problemi correlati