Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [cerco idea] BlackList in php

    vorrei realizzare uno script che blocchi l'accesso al sito a certi ip...

    gli ip sono memorizzati in un file di testo struttarato in questo modo:

    nomehost:x.x.x.x-x.x.x.x

    dove x.x.x.x-x.x.x.x sono gli ip iniziali-finali del range da bannare...

    qual'è il miglior modo per realizzare una cosa del genere?

    no sql => la blocklist è davvero enorme e un controllo su mysql sarebbe pesantissimo...

    avevo pensato a realizzare la blocklist come "array" nel file di testo da includere nella pagina php...

    altrimenti un full-text search + comparazione pensate possa essere realizzabile?

  2. #2
    Perche' no nel db.

    Un array non e' per sempre. ad ogni esecuzione dello script lo devi definire. Fai una tabella banned. con solo gli IP indicizzati.
    quado definisci la query di identificazione passi prima da una query sui bannati. Se bannato ciao ciao, se no identifichi...

    Ma bannare per range....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    Perche' no nel db.

    Un array non e' per sempre. ad ogni esecuzione dello script lo devi definire. Fai una tabella banned. con solo gli IP indicizzati.
    quado definisci la query di identificazione passi prima da una query sui bannati. Se bannato ciao ciao, se no identifichi...

    Ma bannare per range....

    l'array pensavo di crearlo una volta per tutte e scriverlo in un file da includere... in pratica un blocklist in formato array...

    per quanto riguarda il range nessuna idea? i ban che vogli fare io sono tutti per range

    forse si potrebbe fare un $ip[4]++ fino ad arrivare al limite finale.. ma penso ke una cosa del genere sia assolutamente da pazzi (a livello di carico del server)....

    bisognerebbe fare un controllo in base al primo gruppo... se passa il primo gruppo ok, quindi si controlla il secondo gruppo... se passa ok... quindi via col terzo ed in fine si controlla il 4° facendo il ++.. (il prob è ke alcuni range variano anche l'interno del 3° gruppo! )

    nessuno ha qualche idea geniale? :master:

  4. #4
    la blocklist ke voglio utilizzare è costituita dal 60% degli indirizzi ip di tutto il mondo....

    (la antip2p blocklist di bluetack)

    scriverli per esteso uno ad uno è praticamente impossibile

  5. #5
    forse ho trovato:

    http://answers.google.com/answers/threadview?id=379235




    speriamo funzi

    certo che così complessa non ci sarei mai arrivato da solo

  6. #6
    :master: :master:

    mettiamo che dentro l'array $banned_ips ci stiano gli ip in formato LONG (quindi un numero e non i 4 byte in formato "leggibile")

    codice:
    $banned_ip = array();
    $current_ip = ip2long($_SERVER['REMOTE_ADDR'])
    while($banned_ip = each($banned_ips)) {
      if $banned_ip['start'] => $current_ip && $banned_ip['end'] =< $current_ip {
        echo "Il tuo ip appartiene a un range di ip bannato"; // oppure qualcosa di + "anonimo" come: Errore interno alla pagina
        break;
      }
    }
    il codice è +/- questo...l'array nn importa se lo prendi da file o da db (personalmente ti consiglio da db o da file...ma file che carichi tu non un file php che includi xche il tempo per eseguire questa operazione è MOLTO elevato...quasi 1 volta e mezzo + lento di estrarre lo stesso numero di righe dal db e 2 volte + lento di lanciare un ben file e un bell'explode per estrarre i dati da un file di testo per metterli in un'array)

    come vedi è molto semplice come codice è effettivamente ti blocca gli ip. Con semplicità, se vuoi fare le WHITE LIST, quindi possono accedere solo range di ip in quella lista, basta modificare l'if
    Ad es se vuoi aggiungere una motivazione specifica ti basta aggiungere una colonna all'array chiamata magari REASON e fai dentro l'if che controlla l'ip

    codice:
    if (isset($banned_ip['reason']) && $banned_ip['reason'] !=  '') {
      echo $banned_ip['reason'];
    } else {
      ... come su ...
    }
    ciauz

  7. #7
    grazie daniele!

    effettivamente io vedevo i range come qualcosa di "non confrontabile"... avevo persino pensato di provare a togliere il . ma poi si cofonde il 2° e 3° gruppo etc...

    invece mi hai fatto vede ke si confrontano senza prob

    la lista ke ho io è perfetta per l'explode..

    ne faccio prima uno per separare nome/range e poi uno per separere inizio/fine

    grazie ancora

  8. #8
    fighissimo!!!

    funziona!!!!

    grande!!! (non che dubitassi di te )

    codice:
    <?PHP
    $current_ip = ip2long($_SERVER['REMOTE_ADDR']);
    $lines = file("antip2p.txt");
    foreach ($lines as $line){
    	$riga = explode(":", $line);
    	$reason = "".$riga[0]."";
    	$range = explode("-", $riga[1]);
    	if ($current_ip >= (ip2long($range[0])) && ($current_ip <= ip2long($range[1]))){
    		echo "Sorry ".$reason."
    \nYou are not allowed to access this page\n";
    		die();
    	}
    }
    ?>
    questo il formato della blocklist che uso:
    Fake File servers:2.1.0.85-2.1.0.85
    Fake File servers:3.1.0.60-3.1.0.60
    Fake File servers:3.1.0.251-3.1.0.251
    Italian Public Broadcasting Company RAI:212.162.64.0-212.162.93.255
    s0.micromend.bbnplanet.net:4.0.38.34-4.0.38.36
    s0.wbcsanfran.bbnplanet.net:4.0.38.42-4.0.38.52
    s0.verizonlegaldpt.bbnplanet.net:4.0.38.58-4.0.38.60
    s0.bdai12.bbnplanet.net:4.0.38.74-4.0.38.80
    s0.wennersf.bbplanet.net:4.0.38.86-4.0.38.88
    mi resta ancora un piccolo dubbio degno solo di uno niubbo come me:

    se ho una riga così (ne ho parecchie)
    s0.wennersf.bbplanet.neterchè mia nonna usa quel provider:4.0.38.86-4.0.38.88
    come faccio a spezzare solo in base all'ultima occorrenza del ":" ingnorando tutte quelle ke vengono prima?

  9. #9
    in che senso? :master:

    PS: per risparmiare MOLTO sui tempi di esecuzione fatti un cacca scriptino che converte la lista in una lista standard e pulita con dentro gli ip già convertiti in numeri

  10. #10
    Originariamente inviato da daniele_dll
    in che senso? :master:

    PS: per risparmiare MOLTO sui tempi di esecuzione fatti un cacca scriptino che converte la lista in una lista standard e pulita con dentro gli ip già convertiti in numeri
    ottima l'idea di una cache

    il "reason" può a sua volta contenere dei :

    esempio di un'entry nella lista:

    Questo ip è bloccato: è sfigato :17.17.17.17-17.17.17.18

    come vedi la stringa in rosso contiene dei ":"... io però vorrei estrarla per intero....

    pensavo di fare un eregi, contare quanti sono e se sono più di 0 sostituirli con un "_" così da poter fare l'explode senza problemi...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.