MOD Blocca Registrazioni BOT

Supporto a phpBB2. Lo staff dedica gran parte del supporto alla nuova versione phpbb3 quindi ti consigliamo di aggiornare il tuo forum quanto prima.
Regole del forum
Aggiorna il tuo forum a phpBB3.
Il supporto a phpbb2 sarà limitato!

Per poter aggiornare il tuo forum con la nuova versione LEGGI QUI Lo staff di phpBB.it dedica gran parte del supporto alla nuova versione phpbb3 quindi ti consigliamo di aggiornare il tuo forum quanto prima.

MOD Blocca Registrazioni BOT

Messaggioda davec » 30 mar 2007 00:08

Salve a tutti, ho appena finito di realizzare una MOD che dovrebbe (il condizionale in questi casi è sempre d'obbligo) bloccare le registrazioni dei bots.
Appurato che i bots riescono, probabilmente con un algoritmo di ocr, ad eludere la conferma del Codice Visuale... ho pensato di aggiungere un meccanismo nuovo in fase di registrazione in modo da confonderli.
Si tratta di una formula, generata casualmente ad ogni tentativo di registrazione, per la quale l'utente deve calcolare il risultato e digitarlo nell'apposito campo:

Immagine

Ho deciso di visualizzare i numeri in formato alfabetico per cercare di confondere il più possibile l'eventuale interpretazione da parte dei bots.

Attualmente la formula è fissa, cioè A * B + C dove A, B e C sono numeri generati casualmente ad ogni tentativo di registrazione. Sto già lavorando sulla nuova versione di questa MOD con la quale sarà possibile parametrizzare il numero delle variabili casuali e gli operatori in gioco.
Spero che la provate in tanti e mi fate sapere se funziona (cioè se non si registrano più i bots, di per se la MOD l'ho testata approfonditamente e non da alcun problema).

Consapevole che prima o poi i bots riusciranno, in qualche modo, anche a raggirare questo sistema... nel frattempo godiamocela, poi ne inventeremo un'altra.

Fatemi sapere.

Codice: Seleziona tutto
##############################################################
## MOD Title: AntiBot Registration
## MOD Author: Davide Catini < davide@catini.it > www.catini.it
## MOD Description: Blocca la registrazione dei Bots
## MOD Version: 1.0
##
## Installation Level: Easy
## Installation Time:  10 Minutes
## Files To Edit: 3
##         - includes/usercp_register.php 
##         - templates/subSilver/profile_add_body.tpl
##         - language/lang_italian/lang_main.php
##
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##############################################################
## Author Notes:
##
## Per il momento la formula è fissa: A * B + C
## Nella prossima versione la formula sarà parametrizzabile
## tramite ACP.
##
##############################################################
## MOD History:
##
##   2007-03-29 - Version 1.0
##      - First public release.
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ SQL ]------------------------------------------
#
# Remember to change the table prefix used on your database
ALTER TABLE `phpbb_confirm` ADD `davec_result` CHAR( 6 ) NOT NULL;

#
#-----[ OPEN ]------------------------------------------
#
includes/usercp_register.php

#
#-----[ FIND ]------------------------------------------
#
         $strip_var_list = array('email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests', 'confirm_code' => 'confirm_code');
   
#
#-----[ IN-LINE FIND ]------------------------------------------ 
#
         );
   
#
#-----[ IN-LINE BEFORE, ADD ]------------------------------------------
#
         , 'davec_result' => 'davec_result'

#
#-----[ FIND ]------------------------------------------
#
         $sql = 'SELECT code

#
#-----[ REPLACE WITH ]------------------------------------------
#
         $sql = 'SELECT code, davec_result

#
#-----[ FIND ]------------------------------------------
#
            if ($row['code'] != $confirm_code)
            {
               $error = TRUE;
               $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong'];
            }

#
#-----[ AFTER, ADD ]------------------------------------------
#
            elseif ($row['davec_result'] != $davec_result)
            {
               $error = TRUE;
               $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['davec_result_wrong'];
            }

#
#-----[ FIND ]------------------------------------------
#
         $confirm_id = md5(uniqid($user_ip));

#
#-----[ AFTER, ADD ]------------------------------------------
#

      // Generate the davec formula
      
      $davec_n1 = mt_rand(1,9);
      $davec_n2 = mt_rand(1,9);
      $davec_n3 = mt_rand(1,9);
      
      switch( $davec_n1 )
      {
         case 1:
            $davec_c1 = 'one';
            break;
         case 2:
            $davec_c1 = 'two';
            break;
         case 3:
            $davec_c1 = 'three';
            break;
         case 4:
            $davec_c1 = 'four';
            break;
         case 5:
            $davec_c1 = 'five';
            break;
         case 6:
            $davec_c1 = 'six';
            break;
         case 7:
            $davec_c1 = 'seven';
            break;
         case 8:
            $davec_c1 = 'eight';
            break;
         case 9:
            $davec_c1 = 'nine';
            break;
      }
      
      switch( $davec_n2 )
      {
         case 1:
            $davec_c2 = 'one';
            break;
         case 2:
            $davec_c2 = 'two';
            break;
         case 3:
            $davec_c2 = 'three';
            break;
         case 4:
            $davec_c2 = 'four';
            break;
         case 5:
            $davec_c2 = 'five';
            break;
         case 6:
            $davec_c2 = 'six';
            break;
         case 7:
            $davec_c2 = 'seven';
            break;
         case 8:
            $davec_c2 = 'eight';
            break;
         case 9:
            $davec_c2 = 'nine';
            break;
      }

      switch( $davec_n3 )
      {
         case 1:
            $davec_c3 = 'one';
            break;
         case 2:
            $davec_c3 = 'two';
            break;
         case 3:
            $davec_c3 = 'three';
            break;
         case 4:
            $davec_c3 = 'four';
            break;
         case 5:
            $davec_c3 = 'five';
            break;
         case 6:
            $davec_c3 = 'six';
            break;
         case 7:
            $davec_c3 = 'seven';
            break;
         case 8:
            $davec_c3 = 'eight';
            break;
         case 9:
            $davec_c3 = 'nine';
            break;
      }
      
      $davec_result = $davec_n1 * $davec_n2 + $davec_n3;
   
#
#-----[ FIND ]------------------------------------------
#
      $sql = 'INSERT INTO ' . CONFIRM_TABLE . " (confirm_id, session_id, code)

#
#-----[ IN-LINE FIND ]------------------------------------------
#
      )

#
#-----[ IN-LINE BEFORE, ADD ]------------------------------------------
#
      , davec_result

#
#-----[ FIND ]------------------------------------------
#
VALUES ('$confirm_id', '". $userdata['session_id'] . "', '$code')";

#
#-----[ IN-LINE FIND ]------------------------------------------
#
      )

#
#-----[ IN-LINE BEFORE, ADD ]------------------------------------------
#
, $davec_result      

#
#-----[ FIND ]------------------------------------------
#
      'L_CONFIRM_CODE_EXPLAIN'   => $lang['Confirm_code_explain'],

#
#-----[ AFTER, ADD ]------------------------------------------
#
      'L_DAVEC_FORMULA_EXPLAIN' => $lang['davec_formula_explain'],
      'L_DAVEC_FORMULA' => $lang['davec_formula'] . ' ' . $lang[$davec_c1] . ' * ' . $lang[$davec_c2] . ' + ' . $lang[$davec_c3] .' ?',

#
#-----[ OPEN ]------------------------------------------
#
language/lang_italian/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
$lang['Confirm_code_explain'] = 'Inserisci il codice di conferma visuale come indicato nell\'immagine. Il sistema riconosce la differenza tra maiuscole e minuscole, lo zero ha una barra diagonale per distinguerlo dalla lettera O.';

#
#-----[ AFTER, ADD ]------------------------------------------
#


//
// davec formula confirmation system strings
//
$lang['davec_formula_explain'] = 'Inserisci il risultato della formula in formato numerico';
$lang['davec_formula'] = 'Quanto fa';
$lang['one'] = 'uno';
$lang['two'] = 'due';
$lang['three'] = 'tre';
$lang['four'] = 'quattro';
$lang['five'] = 'cinque';
$lang['six'] = 'sei';
$lang['seven'] = 'sette';
$lang['eight'] = 'otto';
$lang['nine'] = 'nove';
$lang['davec_result_wrong'] = 'Il risultato della formula inserito non è corretto';

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/profile_add_body.tpl

#
#-----[ FIND ]------------------------------------------
#
   <tr>
     <td class="row1"><span class="gen">{L_CONFIRM_CODE}: * </span><br /><span class="gensmall">{L_CONFIRM_CODE_EXPLAIN}</span></td>
     <td class="row2"><input type="text" class="post" style="width: 200px" name="confirm_code" size="6" maxlength="6" value="" /></td>
   </tr>

#
#-----[ AFTER, ADD ]------------------------------------------
#
   <tr>
     <td class="row1"><span class="gen">{L_DAVEC_FORMULA_EXPLAIN}: *</span><br /><span class="gensmall">{L_DAVEC_FORMULA}</span></td>
     <td class="row2"><input type="text" class="post" style="width: 200px" name="davec_result" size="6" maxlength="6" value="" /></td>
   </tr>

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM


Zanardi ha realizzato una variante che permette di ricevere una email contenente username ed indirizzo email dei bot che cercano di registrarsi e vengono bloccati da questa MOD.
Riporto qui di seguito la sua variante (da installare solo dopo aver installato la MOD prima riportata) :

Codice: Seleziona tutto
#
#-----[ OPEN ]------------------------------------------
#
includes/usercp_register.php

#
#-----[ FIND ]------------------------------------------
#
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['davec_result_wrong'];

#
#-----[ AFTER, ADD ]------------------------------------------
#
     $destC = "TUA_EMAIL@alice.it";

     $subject = "ATTENZIONE inserito risultato sbagliato nella formula x la registrazione";

     $messageOrig = "ATTENZIONE, un utente ha sbagliato il calcolo della formula \n User: $username \n e-mail: $email";

mail($destC, $subject, $messageOrig);
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM


Ovviamente dovrete sostituire TUA_EMAIL@alice.it con l'indirizzo di posta al quale volete indirizzare la segnalazione!

Colgo l'occasione per ringraziare tutti quelli che stanno gratificando questa mia idea! :lol:
Ultima modifica di davec il 20 apr 2007 17:19, modificato 3 volte in totale.
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda davec » 30 mar 2007 12:24

FUNZIONA!

Ho modificato la tabella phpbb_confirm aggiungendo il campo relativo all'ip di chi tenta di registrarsi.
Pochi minuti fa c'è stato un tentativo fallito da parte di un bot, il quale ip corrisponde a:

Hostname : 222.100.65.29
Country Code : KR
Country Name : Republic of Korea
Region Name : Cholla-namdo
City : Saudong
ISP : Korea Telecom
Organization : sudokwonseobubonbu

Se questo non è un bot... :!:

Naturalmente non risulta come ultimo utente iscritto!
A quanto pare la modifica con la formula da calcolare sta funzionando.
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda davec » 30 mar 2007 23:12

Non capisco... ho postato questa MOD da circa 24 ore e nessuno si è degnato di scrivere un solo misero commento?
Ma allora quando su questo forum si legge "aiuto, non se ne può più dei bots", "spammers, situazione insostenibile", etc. etc. è solo un modo per lamentarsi... per poi fregarsene completamente di una soluzione bella e pronta oltre che gratuita?
Non capisco...
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda baila » 31 mar 2007 10:26

Ciao,non ti arrabbiare! ;)
Io la proverò a breve,spero di non fare casini con la modifica del codice...
Mi potresti spiegare meglio cosa cambia?
Ciao e grazie :)
Avatar utente
baila
Utenti
Utenti
 
Messaggi: 13
Iscritto il: 08 ott 2005 17:15
Località: Montegalda

Messaggioda davec » 31 mar 2007 13:11

Ciao baila, cambia che nella schermata di registrazione al forum, oltre all'ormai inutile Codice Visuale, ci sarà una formuletta casuale (vedi l'immagine all'inizio di questo topic) che deve essere calcolata per accettare la registrazione.
Siccome attualmente i bots non sono in grado di "gestire" questa cosa... non potranno andare avanti con la registrazione.
Non sono arrabbiato, ero solo un po' deluso dal fatto che, credendo di aver fatto qualcosa di buono e utile per tutti, nessuno aveva preso in considerazione questa cosa.
Sul tuo forum quante iscrizioni farlocche ci sono? (sul mio ormai erano in media 2 al giorno, adesso zero).
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda baila » 31 mar 2007 13:28

davec ha scritto:Ciao baila, cambia che nella schermata di registrazione al forum, oltre all'ormai inutile Codice Visuale, ci sarà una formuletta casuale (vedi l'immagine all'inizio di questo topic) che deve essere calcolata per accettare la registrazione.
Siccome attualmente i bots non sono in grado di "gestire" questa cosa... non potranno andare avanti con la registrazione.
Non sono arrabbiato, ero solo un po' deluso dal fatto che, credendo di aver fatto qualcosa di buono e utile per tutti, nessuno aveva preso in considerazione questa cosa.
Sul tuo forum quante iscrizioni farlocche ci sono? (sul mio ormai erano in media 2 al giorno, adesso zero).


Ok grazie mille,ora mi è tutto chiaro! ;)
Registrazioni da Bot 3-4 a settimana dipende....
comunque non ho molti accessi e potrei pure bloccare la registrazione degli user.
Ciao e grazie 8)
Avatar utente
baila
Utenti
Utenti
 
Messaggi: 13
Iscritto il: 08 ott 2005 17:15
Località: Montegalda

Messaggioda tonicopi » 31 mar 2007 18:06

Ciao Davec. Non te la prendere. I superindaffarati amministratori di questo forum spesso non rispondono. Altri svegli come te, si fanno la mod e se la tengono per loro. Altri, imbranati come me, neppure capiscono quello che devono fare. Ad esempio io mi fermo subito a questa riga (che è la prima della mod!):
----[ SQL ]------------------------------------------
#
# Remember to change the table prefix used on your database
ALTER TABLE `phpbb_confirm` ADD `davec_result` CHAR( 6 ) NOT NULL;

Ad occhio, con il mio scarso inglese, leggo che mi devo ricordare del cambio di prefisso di una tabella del mio database ma NON capisco cosa devo fare.
Al resto delle modifiche penso che ci arriverei aiutandomi con una guida che so di aver letto in questo forum. Però metto mano malvolentieri al codice perchè temo di sbagliare.

Il problema di PHPBB è che ha un pannello di gestione utenti davvero incredibilmente povero di funzioni. Cosa vuoi che sia altrimenti aprirlo una volta alla settimana e fare pulizia?
Per esempio non è possibile, a quanto ne so io, bloccare del tutto le iscrizioni e farle solo manualmente da parte dell'amministratore. Oppure sono io che non lo so fare?
La gestione degli utenti in molti altri forum e cms è assolutamente più semplice, facile e completa che non in PHPBB. E anche la conferma visuale devo dire che è rimasta molto primitiva e facilmente leggibile dai BOT. Ci sono adesso conferme visuali che talvolta sbaglia ad interpretare persino il nostro occhio...
Credo che alla fine opterò per altri forum quando li dovrò installare, perchè con phpbb ho talvolta decine di iscrizioni al giorno che mi è macchinoso gestire. Prendi la cancellazione. Deve essere fatta manualmente cercando un utente alla volta. Io non mi rendo conto perchè non sia possibile per l'amministratore richiamare gli utenti a 50 alla volta e cancellarli semplicemente spuntando una casella
Ciao e grazie
Toni
L'attesa del piacere è essa stessa... PIACERE!
http://www.tonicopi.it
Avatar utente
tonicopi
Utenti
Utenti
 
Messaggi: 71
Iscritto il: 12 giu 2005 15:42
Località: Dueville (Vicenza)
Versione: phpBB 3.0.1
Mod: SI
Server: UNIX/Linux

Messaggioda bbnewbie » 31 mar 2007 19:33

----[ SQL ]------------------------------------------
#
# Remember to change the table prefix used on your database
ALTER TABLE `phpbb_confirm` ADD `davec_result` CHAR( 6 ) NOT NULL;

Ad occhio, con il mio scarso inglese, leggo che mi devo ricordare del cambio di prefisso di una tabella del mio database ma NON capisco cosa devo fare.


ti dice semplicemente che se non usi phpbb_ (default) come prefisso per le tabelle devi modificare la query in modo che corrisponda ai nomi delle tabelle.

per sapere che prefisso usano le tue tabelle basta aprire

config.php

e cercare

$table_prefix

Io non mi rendo conto perchè non sia possibile per l'amministratore richiamare gli utenti a 50 alla volta e cancellarli semplicemente spuntando una casella


installa admin userlist
Avatar utente
bbnewbie
Utenti
Utenti
 
Messaggi: 266
Iscritto il: 04 dic 2006 17:19
versione phpbb: 3.0.2
Versione: 2.0.23->3.02
Mod: NO
Server: UNIX/Linux

Messaggioda awd » 04 apr 2007 14:54

posso provare...
la mod mi sembra abbastanza lunga ma è facile o difficile da fare? se sono troppi i file coinvolti mi creerebbe difficoltà!

Spero che non vengono proposti calcoli come 3251 * 7659 + 2312 :lol:
Avatar utente
awd
Utenti
Utenti
 
Messaggi: 53
Iscritto il: 02 set 2005 01:42
Località: Novara
versione phpbb: 3.0.0
Versione: 3.0.0
Mod: NO
Server: UNIX/Linux

Messaggioda bbnewbie » 04 apr 2007 14:55

## Installation Level: Easy
## Installation Time: 10 Minutes
## Files To Edit: 3
## - includes/usercp_register.php
## - templates/subSilver/profile_add_body.tpl
## - language/lang_italian/lang_main.php
Avatar utente
bbnewbie
Utenti
Utenti
 
Messaggi: 266
Iscritto il: 04 dic 2006 17:19
versione phpbb: 3.0.2
Versione: 2.0.23->3.02
Mod: NO
Server: UNIX/Linux

Messaggioda Zorro » 04 apr 2007 18:39

Per awd: fai una copia di riserva del tuo database, prendi un foglio (o usa blocco note di win) e annota bene tutti i file (comprese le cartelle dove stanno) che la mod ti dice di modificare, fai una copia di riserva di questi file in una cartella del desktop che consiglio di nominare come "file prima della mod pinco pallino". Ora sei pronto per smanettare e se sbagli qualcosa hai tutto quello che serve per tornare all'origine :wink:
Questo va fatto sempre prima di installare qualsiasi mod. Sempre anche il database, non si sa mai...
Avatar utente
Zorro
Utenti
Utenti
 
Messaggi: 136
Iscritto il: 27 ott 2006 17:14
Località: Veneto
Versione: phpBB3.0.2
Mod: SI
Server: UNIX/Linux

Messaggioda davec » 04 apr 2007 19:28

awd ha scritto:posso provare...
la mod mi sembra abbastanza lunga ma è facile o difficile da fare? se sono troppi i file coinvolti mi creerebbe difficoltà!

Spero che non vengono proposti calcoli come 3251 * 7659 + 2312 :lol:


Ciao awd, attualmente la mod genera numeri casuali tra 1 e 9, quindi il massimo risultato possibile è 90 (9 * 9 + 9).

Ci tengo a sottolineare che lo scopo di questa MOD, indipendente da altri eventuali stratagemmi tra cui l'attivazione della registrazione da parte dell'amministratore) è anche quella di non far comparire il bot come ultimo utente registrato che, personalmente, a me da parecchio fastidio anche se poi in realtà non può postare.
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda Giannuzzo » 04 apr 2007 22:34

Scusate la mia cretinagine.
Ma ho delle domande su questo codice.
Il file da modificare qual'è?:)
Il testo che hai scritto.. si deve aggiungere al file di testo?



Per favore rispondete!
Avatar utente
Giannuzzo
Utenti
Utenti
 
Messaggi: 7
Iscritto il: 25 mar 2007 11:00

Messaggioda davec » 05 apr 2007 01:24

COME SI INSTALLANO LE MOD (ITA)

Leggendo questa semplice guida... troverai tutte le risposte. :wink:
La speranza è nemica della pace della mente, come la paura!
Avatar utente
davec
Utenti
Utenti
 
Messaggi: 176
Iscritto il: 21 mar 2007 14:55

Messaggioda tonicopi » 08 apr 2007 19:17

Senz'altro sbaglierò qualcosa io, eppure ho rifatto tutto per ben tre volte, perdendoci così l'intero pomeriggio e sono al punto di partenza. Alla faccia della mod facile da installare in 5 minuti!
Questo è il messaggio di errore che ricevo:

Could not insert new confirm code information

DEBUG MODE

SQL Error : 1136 Column count doesn't match value count at row 1

INSERT INTO phpbb_confirm (confirm_id, session_id, code, davec_result) VALUES ('de3f0132abbcd0d84fee23db70ebc63d', '7f377812fa90ce0f37f994d9b071b541', 'YWBM9K')

Line : 1105
File : usercp_register.php
L'attesa del piacere è essa stessa... PIACERE!
http://www.tonicopi.it
Avatar utente
tonicopi
Utenti
Utenti
 
Messaggi: 71
Iscritto il: 12 giu 2005 15:42
Località: Dueville (Vicenza)
Versione: phpBB 3.0.1
Mod: SI
Server: UNIX/Linux

Prossimo

Torna a Forum di Supporto phpBB2

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite