Precedente :: Successivo |
Autore |
Messaggio |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 30 Lug 2006 23:26 Oggetto: * Script che non vuole saperne di non farsi prendere in giro |
|
|
Ciao.
So che rompo...
La questione di Bannare gli utenti che insultano o fanno SPAM è risolta.
Anzi grazie mille a voi tutti
Ora, invece, il problema è il sistema antifrode.
Ora lo script prevede il controllo attraverso i cookies ma, basta cancellarli e si può votare quante volte si vuole alla faccia del mio settaggio che è di un'ora.Non sono riuscito a trovare alcuna soluzione valida, l'unica che mi viene in mente è quella di non tenere conto dei cookie ma di confrontare l'IP del votante con l'ora della sua ultima votazione. Se questa è < 3600 secondi allora il voto non viene assegnato.
IP e Orario di votazione sono segnati in una tabella così:
sid ip cdate
1138553951 81.208.36.93 2006-07-13 21:08:14
1138553951 81.208.36.93 2006-07-13 22:37:35
1138553951 81.208.36.93 2006-07-17 11:06:57
1138553951 85.18.136.71 2006-07-14 05:12:46
dove sid è l'ID del Sito votato, IP è quello del sito che ha votato e cdate è l'orario in cui ha votato.
Come detto prima, questi dati sono scritti in un cookie. Cancellato il cookie, si vota tranquillamente.
Riporto qui sotto il codice della pagina in cui vengono fatti i controlli e vengono mandati i messaggi.
$err = 1 la votazione è effettuata correttamente;
$err = 2 il voto non viene assegnato (ma basta cancellare i cookie e questo messagio non compare mai):
$err = 5 ti invita ad abilitare i cookie (è addirittura comico, basta che i cookie li cancello prima di arrivare alla pagina di cui vi fornisco il codice).
Sono andato su Hotscript per vedere se esiste una versione più "furba"...nulla da fare. Vi sarei eternamente grato se mi aiutaste a risolvere il problema.
Ecco la pagina in.php:
Codice: | <?
include "config.php";
if (!$site) header("location: $url_to_folder");
$get_rows = mysql_db_query ($dbname,"Select title,url,rank,votes from top_user Where sid='$site'",$db) or die (mysql_error());
if (!mysql_num_rows($get_rows) OR mysql_num_rows ($get_rows) < 1) { header("location: $url_to_folder"); }
$rows = mysql_fetch_array($get_rows);
if ($gateway == 1 AND $stat != "gate") {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<meta name=\"robots\" content=\"all\">\n";
echo "<meta name=\"description\" content=\"Find the most popular sites based on traffic in desktop, free stuff, games, music, celebrities, and more.\">\n";
echo "<meta name=\"keywords\" content=\"top list sites sites links top web sites toplists top lists top list web directory the best sites webdirectory search engines searchengines portals free internet community send postcards free traffic free webpromotion linkexchange link exchange programs webmaster community webmaster affiliate programs computers free cliparts clip arts desktop themes free games free screensavers free wallpapers internet chat cool sites personal homepages webmasters animals crafts movies free mp3 music free cash freestuff free stuff greetingcards shopping women business free gsm telecom free webhosting free magazines cars celebrity celebrities free contests dogs education finance free fonts freeware free graphics health horoscopes jobs jokes free marketing midi pets free phones free free software free themes top websites top sites travel free videogames webcams webdesign webhosting entertainment\">\n";
echo "<meta name=\"revisit-after\" content=\"14 days\">\n";
echo "<title>Welcome to $top_name</title>\n";
echo "</HEAD>\n";
echo "<body bgcolor=\"#FFFFFF\" onLoad=\"if (self != top) top.location = self.location\">\n";
echo "<div align=\"center\"><font size=\"4\"><b>VOTA NELLA TOP DI EVULON - ZARYNA</b><br></font></div><br><br><br>\n";
[color=red]echo "<!-- Inizio codice rotazione banner mobydyck.com -->
<script language=\"JavaScript\">
<!--
var now = new Date();
var nIndex = now.getTime();
document.write('<center>');
document.write('<iframe src=\"http://www.dreamcastleweb.com/public/rotazionebanner/frbanner.php?action=display&id_set=1&page='+nIndex+'\" width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no>');
document.write('<a href=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=go&id_set=1\" target=\"_blank\"><img border=0 src=\"http://www.dreamcastleweb.com/public/rotazionebanner.php?action=display&id_set=1&page='+nIndex+'\" width=468 height=60></a>');
document.write('</iframe><br>');
document.write('</center>');
// -->
</script>
<gmail notifier>
<center>
<iframe src=\"http://www.dreamcastleweb.com/public/rotazionebanner/frbanner.php?action=display&id_set=1&page=1\" width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no>
<a href=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=go&id_set=1\" target=\"_blank\"><img border=0 src=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=display&id_set=1&page=1\" width=468 height=60></a>
</iframe><br>
</center>
</gmail notifier>
<!-- fine codice rotazione banner mobydyck.com -->";[/color] echo "<p align=\"center\"><font size='4'>Stai votando per il sito <b>$rows[title]</b><font></p>\n";
echo "<FORM ACTION=\"in.php\" METHOD=\"POST\">\n";
echo "<p align=\"center\"> </p>\n";
echo "<p align=\"center\">\n";
echo "<INPUT TYPE=\"IMAGE\" NAME=\"SUBMIT_IMAGE\" WIDTH=\"347\" HEIGHT=\"33\" ALT=\"VOTE TO $top_name\" src=\"images/enter.gif\"><BR>\n";
echo "</p>";
echo "<p align=\"center\"> </p>\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"site\" VALUE=\"$site\">\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"stat\" VALUE=\"gate\">\n";
echo "</FORM>\n";
echo "<div align=\"center\"><font size=\"3\">Se vuoi visitare la TOP senza votare, <a href=\"http://www.gollumsurf.com/top/\"> CLICCA QUI</a></font><br><br><br><br>\n";
echo "<div align=\"center\"><font size=\"2\"><b>Copyright Evulon - Zaryna</b> 2006</font></div>\n";
echo "</body>\n";
echo "</html>\n";
echo "";
}
else {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
if ($gateway == 1 && $REQUEST_METHOD == "POST" && isset($site)) {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
$cdate = date ("Ymd");
$err = 1;
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
$query = mysql_db_query ($dbname,"Select ip from top_hits Where sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'",$db) or die (mysql_error());
if ($err == 1 && @mysql_num_rows($query) >= 1) $err = 2;
if ($err == 1 && $use_cookies == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
if ($test_cookies != 1) $err = 5;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values ('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
if ($gateway != 1) {
$cdate = date ("Ymd");
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
$err = 1;
$query = mysql_db_query ($dbname,"Select ip from top_hits Where sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'",$db) or die (mysql_error());
if ($err == 1 && @mysql_num_rows($query) >= 1) {
$err = 2;
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
}
if ($err == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values ('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
?> |
La parte in rosso non c'entra nulla, è solo il codice per il circuito banner.
Le variabili sono chiare, almeno spero.
Ragazzi, veramente, è diventata una sfida all'ultimo ..."script".
Non può essere che vince lui.
Grazie comunque e un saluto sentito.
 |
|
Top |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 31 Lug 2006 09:47 Oggetto: |
|
|
Non puoi basarti sul cookie perchè l'utente potrebbe cancellarlo; non puoi nemmeno basarti sull'indirizzo IP perchè non tutti gli utenti hanno l'IP fisso, con una connessione dial-up cambia ad ogni connessione! Tra l'altro il sistema dell'IP escluderebbe gli utenti aziendali che si trovano dietro ad un router (hanno tutti lo stesso IP pubblico).
Se gli utenti per votare devono loggarsi, basta impostare un flag da qualche parte nel tuo database ed il gioco è fatto, non potranno più votare fino a quando non lo deciderai tu
Se invece il voto è aperto a tutti non credo ci sia una soluzione antifrode  |
|
Top |
|
 |
mirrors Mortale adepto

Registrato: 20/03/06 17:06 Messaggi: 33
|
Inviato: 31 Lug 2006 14:57 Oggetto: |
|
|
tas ha scritto: | Non puoi basarti sul cookie perchè l'utente potrebbe cancellarlo; non puoi nemmeno basarti sull'indirizzo IP perchè non tutti gli utenti hanno l'IP fisso, con una connessione dial-up cambia ad ogni connessione! Tra l'altro il sistema dell'IP escluderebbe gli utenti aziendali che si trovano dietro ad un router (hanno tutti lo stesso IP pubblico).
Se gli utenti per votare devono loggarsi, basta impostare un flag da qualche parte nel tuo database ed il gioco è fatto, non potranno più votare fino a quando non lo deciderai tu
Se invece il voto è aperto a tutti non credo ci sia una soluzione antifrode  |
Ciao.
No, il voto non è aperto a tutti ma solo a coloro che sono iscritti e hai quali ho assegnato un ID.
Attualmente il sistema riconosce l'ID (a prescindere da quale PC parta il voto), controlla se esiste.
Se esiste, registra l'ora di votazione (ammettiamo che sia la prima volta che vota) e scrive il tutto in un cookie.
L'utente va alla pagina in cui c'è il bottone che trasmette il codice e vota.
Il sistema riconosce che l'ID esista, controlla che siano passati 3600 secondi dalla precedente votazione e si comporta di conseguenza come ho più sopra descritto.
Quello che cerco è un sistema che non usi i cookie proprio perché possono essere facilemente cancellati.
Il problema è come costruire una query che riconosca l'ID, l'ora e se questa è inferiore a 3600 secondi dalla precedente votazione dia $err = 2.
Scusami avevo posto male il problema. Non l'IP va riconosciuto ma l'ID.
So bene che non potrò mai impedire a nessuno di autovotarsi ma che almeno lo faccia secondo l'intervallo di tempo stabilito da me.
Aggiungo per chiarire meglio, che la votazione può avvenire da una sola pagina in cui c'è il bottone con il codice da me fornito.
Anche se, per assurdo, uno mettesse il codice su 100 000 pagine, potrebbe votare comunque una sola volta nell'arco di tempo stabilito.
Puff...scusa se sono stato prolisso ma, che stupido!, avevo commeso l'errore di confondere l'IP con l'ID
Ripropongo qui lo script della pagina da modificare:
Codice: | <?
include "config.php";
if (!$site) header("location: $url_to_folder");
$get_rows = mysql_db_query ($dbname,"Select title,url,rank,votes from top_user Where sid='$site'",$db) or die (mysql_error());
if (!mysql_num_rows($get_rows) OR mysql_num_rows ($get_rows) < 1) { header("location: $url_to_folder"); }
$rows = mysql_fetch_array($get_rows);
if ($gateway == 1 AND $stat != "gate") {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<meta name=\"robots\" content=\"all\">\n";
echo "<meta name=\"description\" content=\"Find the most popular sites based on traffic in desktop, free stuff, games, music, celebrities, and more.\">\n";
echo "<meta name=\"keywords\" content=\"top list sites sites links top web sites toplists top lists top list web directory the best sites webdirectory search engines searchengines portals free internet community send postcards free traffic free webpromotion linkexchange link exchange programs webmaster community webmaster affiliate programs computers free cliparts clip arts desktop themes free games free screensavers free wallpapers internet chat cool sites personal homepages webmasters animals crafts movies free mp3 music free cash freestuff free stuff greetingcards shopping women business free gsm telecom free webhosting free magazines cars celebrity celebrities free contests dogs education finance free fonts freeware free graphics health horoscopes jobs jokes free marketing midi pets free phones free free software free themes top websites top sites travel free videogames webcams webdesign webhosting entertainment\">\n";
echo "<meta name=\"revisit-after\" content=\"14 days\">\n";
echo "<title>Welcome to $top_name</title>\n";
echo "</HEAD>\n";
echo "<body bgcolor=\"#FFFFFF\" onLoad=\"if (self != top) top.location = self.location\">\n";
echo "<div align=\"center\"><font size=\"4\"><b>VOTA NELLA TOP DI EVULON - ZARYNA</b><br></font></div><br><br><br>\n";
echo "<!-- Inizio codice rotazione banner mobydyck.com -->
<script language=\"JavaScript\">
<!--
var now = new Date();
var nIndex = now.getTime();
document.write('<center>');
document.write('<iframe src=\"http://www.dreamcastleweb.com/public/rotazionebanner/frbanner.php?action=display&id_set=1&page='+nIndex+'\" width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no>');
document.write('<a href=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=go&id_set=1\" target=\"_blank\"><img border=0 src=\"http://www.dreamcastleweb.com/public/rotazionebanner.php?action=display&id_set=1&page='+nIndex+'\" width=468 height=60></a>');
document.write('</iframe><br>');
document.write('</center>');
// -->
</script>
<gmail notifier>
<center>
<iframe src=\"http://www.dreamcastleweb.com/public/rotazionebanner/frbanner.php?action=display&id_set=1&page=1\" width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no>
<a href=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=go&id_set=1\" target=\"_blank\"><img border=0 src=\"http://www.dreamcastleweb.com/public/rotazionebanner/banner.php?action=display&id_set=1&page=1\" width=468 height=60></a>
</iframe><br>
</center>
</gmail notifier>
<!-- fine codice rotazione banner mobydyck.com -->";
echo "<p align=\"center\"><font size='4'>Stai votando per il sito <b>$rows[title]</b><font></p>\n";
echo "<FORM ACTION=\"in.php\" METHOD=\"POST\">\n";
echo "<p align=\"center\"> </p>\n";
echo "<p align=\"center\">\n";
echo "<INPUT TYPE=\"IMAGE\" NAME=\"SUBMIT_IMAGE\" WIDTH=\"347\" HEIGHT=\"33\" ALT=\"VOTE TO $top_name\" src=\"images/enter.gif\"><BR>\n";
echo "</p>";
echo "<p align=\"center\"> </p>\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"site\" VALUE=\"$site\">\n";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"stat\" VALUE=\"gate\">\n";
echo "</FORM>\n";
echo "<div align=\"center\"><font size=\"3\">Se vuoi visitare la TOP senza votare, <a href=\"http://www.gollumsurf.com/top/\"> CLICCA QUI</a></font><br><br><br><br>\n";
echo "<div align=\"center\"><font size=\"2\"><b>Copyright Evulon - Zaryna</b> 2006</font></div>\n";
echo "</body>\n";
echo "</html>\n";
echo "";
}
else {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
if ($gateway == 1 && $REQUEST_METHOD == "POST" && isset($site)) {
if ($use_cookies == 1) {
setcookie ("test_cookies", "1",time()+(3600*$vote_timeout));
}
$cdate = date ("Ymd");
$err = 1;
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
$query = mysql_db_query ($dbname,"Select ip from top_hits Where sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'",$db) or die (mysql_error());
if ($err == 1 && @mysql_num_rows($query) >= 1) $err = 2;
if ($err == 1 && $use_cookies == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
if ($test_cookies != 1) $err = 5;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values ('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
if ($gateway != 1) {
$cdate = date ("Ymd");
$pdate = time()-(3600*$vote_timeout);
$cndate = time();
$err = 1;
$query = mysql_db_query ($dbname,"Select ip from top_hits Where sid='$site' and cdate between $pdate and $cndate and ip='$REMOTE_ADDR'",$db) or die (mysql_error());
if ($err == 1 && @mysql_num_rows($query) >= 1) {
$err = 2;
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
}
if ($err == 1) {
if ($anti_cheat[$site] == 1) $err = 2;
}
if ($err == 1) {
if ($use_cookies == 1) {
setcookie ("anti_cheat[$site]", "1",time()+(3600*$vote_timeout));
}
mysql_db_query ($dbname,"update top_user set thin=thin+1 Where sid='$site'",$db) or die (mysql_error());
mysql_db_query ($dbname,"insert into top_hits (sid,ip) values ('$site','$REMOTE_ADDR')",$db) or die (mysql_error());
}
header("location: $url_to_folder/index.php?a_m=$err");
}
?> |
Siate pazienti con me.
Qualcuno di voi mi conosce e sa che questo è un problema serio (non faccio il nome per rispetto della privacy.
Un saluto ed un abbraccio, amici
Giorgio |
|
Top |
|
 |
tas Eroe in grazia degli dei


Registrato: 03/10/05 09:59 Messaggi: 166 Residenza: Profondo nord
|
Inviato: 31 Lug 2006 22:43 Oggetto: |
|
|
Scusami, forse mi sono perso qualche puntata precedente ma anche rileggendo i tuoi post non mi risulta del tutto chiaro quello che vorresti fare.
Ad ogni modo, credo che la soluzione sia fare così: ad ogni voto memorizzi in una tabella del database i seguenti campi:
- id del sito
- id dell'utente che ha votato (oppure lo username)
- data e ora del voto
Per verificare se un utente ha già votato quel particolare sito da meno di un ora basta fare una semplice query e confrontare la data memorizzata con quella del server; se la differenza è maggiore di 3600 secondi si registra un nuovo record, altrimenti lo si rifiuta... |
|
Top |
|
 |
anyfile Semidio

Registrato: 27/08/05 17:20 Messaggi: 430
|
Inviato: 24 Ago 2006 19:40 Oggetto: |
|
|
Non capisco, ma se l'utente deve essere registrato, come fa a rivotare cancellando il cooky?
Anche ammesso che cancelli tutti i cooky del tuo sito, una volta che si ricollega risulterà non registrato e dovrà rifare il login. A meno che non ha più fi un account (e questo è un problema) si può riconnettere solo con lo stesso utente di prima.
Un'altra possibilità è di controllare se l'utente ha già votato, nn quando spedisce il voto, ma quando entra nella pagina per votare. In questo modo pui adirritutra non dargli la schermata di voto, ma solo una scritta in cui dice che ha già votato.
Quali delle due sia meglio dipende dal numero di visite della pagina. Se la pagina delle votazioni viene visitata molte più volte del numero di voti, un controllo precedente alvoto significherebbe molti più voti.
Nulla però vieta di basarsi anche sui cookies. Se c'è il cooky allora non serve neanche il controllo e l'utente ha già votato, se non c'è il cooky si controlla nel database.
Non so nulla di PHP per cui mi guardo bene dal fornire codice |
|
Top |
|
 |
horus Macchinista


Registrato: 22/03/05 10:48 Messaggi: 2554 Residenza: Sirio e dintorni
|
Inviato: 25 Ago 2006 08:43 Oggetto: |
|
|
Arrivo solo ora e magari hai già risolto comunque...
Hai già pensato di sostituire nella tabella top_hits il campo IP con un campo USERID (copiato dalla tabella degli utenti)?
A questo punto la tua query di controllo potrebbe essere Codice: | Select userid from top_hits Where sid='$site' and cdate between $pdate and $cndate and userid=$variabile_contenente_userid | e se vuoi renderla ancora più fine puoi togliere direttamente il controllo delle date così ogni utente potrà votare ogni sito una sola volta. Codice: | Select userid from top_hits Where sid='$site' and userid=$variabile_contenente_userid | Se la query restituisce un record vuol dire che l'utente ha già votato per quel sito altrimenti lo fai votare. |
|
Top |
|
 |
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|