Ricerca parola in file

Salve a tutti.

Sono alle prime armi con php.

Gestisco un sito internet con joomla e vorrei modificare un componente (akocomment) per creare una blacklist di indirizzi ip contro lo spammer.

Mi servirebbe quindi del codice che ricerca all'nterno di un file un ip noto di spam e bloccare l'utente con quel ip.

Ecco cosa ho scritto ma mi da dei problemi.

In particolare come si fa a cercare una parola in un file?

$ip = getenv('REMOTE_ADDR');

$badips = file('blacklist.txt');

if (array_search("$ip\n", $badips)) {

   echo "Some very nice message to your spammer!";

   exit;

}

Sembra che non riconosca il /n

Come posso risolvere.

Grazie mille, ciao.

inviato 9 anni fa
belabe
X 0 X

Ciao,

Hosting windows? leggi qui

http://tw.php.net/file

semplificherei il tutto usando file_get_contents() e poi una semplice ricerca di stringa, dovrebbe essere anche più veloce!

 :bye:

risposto 9 anni fa
robertomigli
modificato 9 anni fa
X 0 X

No, ho un hosting linux.

risposto 9 anni fa
belabe
X 0 X

mm...allora potrebbe essere il file che finisce on \r\n - codifica windows - ma rimane vaildo il secondo consiglio.

 :bye:

risposto 9 anni fa
robertomigli
X 0 X

Salve a tutti.

Sono alle prime armi con php.

Gestisco un sito internet con joomla e vorrei modificare un componente (akocomment) per creare una blacklist di indirizzi ip contro lo spammer.

Mi servirebbe quindi del codice che ricerca all'nterno di un file un ip noto di spam e bloccare l'utente con quel ip.

Ecco cosa ho scritto ma mi da dei problemi.

In particolare come si fa a cercare una parola in un file?

$ip = getenv('REMOTE_ADDR');

$badips = file('blacklist.txt');

if (array_search("$ip\n", $badips)) {

   echo "Some very nice message to your spammer!";

   exit;

}

Sembra che non riconosca il /n

Come posso risolvere.

Grazie mille, ciao.

Diciamo che tutto il tuo sistema è passibile di mille modifiche, quel che è peggio è che non riuscirai così a crearti una vera black list, in quanto i metodi per aggirarla sono molteplici; ma qualcosa si può fare, quindi:

per prima cosa cerca di recuperare l'indirizzo IP del "visitatore" quanto più accuratamente puoi.

if($_SERVER['HTTP_X_FORWARDED_FOR'] != '') { $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $IP = $_SERVER['REMOTE_ADDR']; };

la costante HTTP_X_FORWARED_FOR se non ricordo male, è una costante di Apache ed è poco documentata in PHP purtroppo.

Essa ti permette di verificare se l'IP del visitatore è "coperto" dietro un proxy, così se REMOTE_ADDR fallisce l'IP è l'altro; ovviamente se si usano più proxy a cascata nulla si può fare.

Ma prima ancora devi sapere se l'utente è dietro un server Apache, se no tutto crolla, quindi prima fai così:

if (strtolower(getenv('SERVER_SOFTWARE')) == 'apache') {
    if($_SERVER['HTTP_X_FORWARDED_FOR'] != '') { 
      $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } else { 
      $IP = getenv('REMOTE_ADDR'); 
    }
} else $ip = getenv('REMOTE_ADDR');

Ora hai con ragionevole sicurezza un buon numero IP dal client, è ora di confrontarlo con la tua lista nera.

if (file_exists('listanera.txt')) {
    $badip = file('listanera.txt');
    foreach($badip as $riga)
        if (substr_count($riga, $ip) != 0) {
            echo "Probabile IP di spammer trovato in $ip";
            exit;
        }
} else { echo "Mi manca il file contenente la lista nera!";

Moltissimo si può fare ancora e ancora, non riusciresti ad avere una vera lista nera funzionale, questo perché gli spammer non mandano messaggi da casa loro ;) ma in genere da server "zombie" che nulla sanno di ciò che sta avvenendo, in questo modo potresti persino bloccare gli indirizzi IP provenienti dal server che ospita questo forum, e non è nemmeno tanto assurdo credimi.

Se il tuo problema è evitare che qualche bot scriva in un tuo forum o guest book, meglio sarebbe implementare un buon sistema captcha o meglio ancora, una filtro anti spam come già ne esistono di ottimi.

risposto 9 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda