dal 2003, semper fidelis!

BAN ip via PHP

Il luogo dove parlare di informatica.

Moderator: Moderatori

regular expression is the way :smile:

Con il redirect...
al posto di echo

Code: Select all

<?php
	$blacklist = array(
		"/93./",
		"/94.36.15.13/",
		"/81.22.34.12/"
	);
	$client = $_SERVER['REMOTE_ADDR'];

	foreach($blacklist as $ip) {
		if(preg_match($ip, $client)) { 
			header("location: http://www.google.com/"); 
			exit();  
		}
	}
?>
<html>
<body>
<p>Ipnonbannato</p>
</html>
</body>

Errato
$deny = array("93.0.0.0", "1.2.3.4", "3.0.0.0", "10.0.0.0");

Corretto
$deny = array("93.0.0.0", "1.2.3.4", "3.0.0.0", "10.0.0");

in pratica la funzione di genny dice "prendi tutti quelli che contengono questo '10.0.0' " quindi 10.0.0.0 - 10.0.0.1 - 10.0.0.2 - 10.0.0.3 ecc....anche se, però, erroneamente prenderebbe pure 0.10.0.0 - 1.10.0.0 - 2.10.0.0 ecc....

Re:

Sarn0! wrote:Errato
$deny = array("93.0.0.0", "1.2.3.4", "3.0.0.0", "10.0.0.0");

Corretto
$deny = array("93.0.0.0", "1.2.3.4", "3.0.0.0", "10.0.0");

in pratica la funzione di genny dice "prendi tutti quelli che contengono questo '10.0.0' " quindi 10.0.0.0 - 10.0.0.1 - 10.0.0.2 - 10.0.0.3 ecc....anche se, però, erroneamente prenderebbe pure 0.10.0.0 - 1.10.0.0 - 2.10.0.0 ecc....
Si ineffetti il codice andrebbe potenziato... l'idea però era quella...
Genny, fosse per me la implementerei lato rete la gestione delle blacklist, ma per quel che mi serve
basta e avanza il ciclo (if o for che sia) :D
Molto più banalmente io mi creerei un .htaccess con le subnet/ip che vuoi bannare(soluzione al quanto easy ma comunque professionale)

Code: Select all

order allow,deny
deny from 1.2.3.4
deny from 1.2
deny from 1.2/16
allow from all

da htaccess non va bene
perchè devo limitare solo per una pagina specifica gli IP


Gianni, io avevo catto copia/incolla
del testo di Gennuz,
inoltre durante i test avevo cancellato tutti gli IP (a caz)
e messo solo il MIO
(esempio 93.1.2.3) e poi (92.1.2.0) e poi ho provato (92.1.2)

insomma, ho fatto varie prove e non andava MAI

Come ho fatto ora, VA
la funzione preg_match
sembra fare al mio caso

http://it.php.net/manual/en/function.preg-match.php


Code: Select all

    <?php
       $blacklist = array(
          "/93./",
          "/94.36.15.13/",
          "/81.22.34.12/"
       );
       $client = $_SERVER['REMOTE_ADDR'];

       foreach($blacklist as $ip) {
          if(preg_match($ip, $client)) {
             header("location: http://www.google.com/");
             exit(); 
          }
       }
    ?>
    <html>
    <body>
    <p>Ipnonbannato</p>
    </html>
    </body>

Re:

snipershady wrote: Come ho fatto ora, VA
la funzione preg_match
sembra fare al mio caso

http://it.php.net/manual/en/function.preg-match.php
Grande.
Va be ti può funzionare anche con la stristr...

va bene anche qon questa

Code: Select all

   if(strlen(stristr($client,$ip))>0)
Ma è più corretto quello scritto da te
Però mi sa che anche giocando con l'htaccess puoi proteggere un unico file

Code: Select all

<Files prova.php>
order allow,deny
deny from 1.2.3.4
deny from 1.2
deny from 1.2/16
allow from all
</Files>

Si funziona anche su un unico file specificandone il nome come ha messo nell'esempio gennaro

Who is online

In total there are 2 users online :: 0 registered, 0 hidden and 2 guests (based on users active over the past 5 minutes)
Most users ever online was 164 on Wed Aug 18, 2021 7:03 pm

Users browsing this forum: No registered users and 2 guests