Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: Blocco ip con php

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    24

    Blocco ip con php

    Salve. Mi presento ai navigatori del forum: Claudio.
    A mie spese, calcolate in termini di tempo dedicato diurno e notturno, ho appreso che ogni istruzione php presentata qua e là nel web non sempre risulta funzionante; penso, chiedendo venia se quanto sto per scrivere è una "palla", che questo dipenda non solo dal browser usato ma soprattutto dal tipo di server cui è supportato il servizio ed altro.
    Quindi, ringraziando per la vostra pazienza fin qui spremuta per leggere queste righe, descrivo il fenomeno a cui non riesco a dare soluzione. Come ben sapete, scrivono che per bloccare visite indesiderate al sito è necessario impostare correttamente l'IP da bannare. Un modo è questo: XXX.XXX.XXX.XXX Volendo includere altri IP non esattamente precisati, alcuni scrivono che sarebbe sufficiente scrivere XXX.XXX.XXX. (notate il punto finale), altri XXX.XXX.XXX.*, altri ancora XXX.XXX.XXX/8 oppure 16 oppure 24 etc.
    Nel mio caso nessuno di questi casi utilizzati per il blocco di IP multipli risulta funzionare, mentre il blocco funziona benissimo quando l'IP è indicato numericamente fino all'ultima cifra.
    Chiedo aiuto per poter risolvere tale evento. Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Wow... cercando di esprimerti bene ti assicuro che ti sei espresso nella maniera peggiore possibile, non ho mai letto nulla di così... ambiguo.

    Non si capisce se la funzione che utilizzi non esegue correttamente ciò che vuoi, o se hai problemi nella logica da implementare per la funzione...

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Benvenuto.
    Dovresti anche farci vedere il codice che usi per il blocco, altrimenti non è possibile aiutarti, non sappiamo se usi un'espressione regolare, una stringa semplice o altro.

    Ricorda inoltre che questi sistemi sono efficaci solo se gli IP da bloccare sono IP statici, se si tratta di IP dinamici non serve a granché, basta spegnere e riaccendere il router per ottenere un IP diverso ed aggirare il blocco.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    24
    Ringrazio per le risposte. Il codice usato per il blocco è il seguente:

    <?php $blacklist = array("78.134.94.192");


    if(in_array($_SERVER['REMOTE_ADDR'], $blacklist)) {


    header("Location: http://www.xxxxxx.xx");


    die();


    } ?>

    l'IP indicato corrisponde a quello che in questo momento risulta essere il mio.
    Le modifiche introdotte, non funzionanti, sono state:

    78.134.94.0/8
    78.134.94.*
    78.134.94.

    Grazie per l'attenzione. (scusate per l'ambiguità della prima esposizione, è dovuta volendo rispettare nel migliore dei modi il regolamento del forum)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ovvio che non funziona, in_array controlla le corrispondenze esatte...
    Ti consiglio l'utilizzo di: http://php.net/manual/en/function.preg-match.php
    o di un ciclo insieme all'utilizzo delle funzioni "strstr" e "str_replace"

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se fai in_array() verrà eseguita una comparazione tra stringhe, quindi ovviamente hai il comportamento che descrivi.

    E' come se facessi
    if ("78.134.94.192" == $ip)

    sarà true solo se anche dentro $ip c'è lo stesso indirizzo, nella comparazione tra stringhe non esistono caratteri jolly, quindi niente *

    allo stesso modo se usi le altre versioni, saranno
    if ("78.134.94.0/8" == $ip)
    if ("78.134.94.*" == $ip)
    if ("78.134.94." == $ip)

    chiaramente vere solo se dentro $ip c'è esattamente la stringa indicata prima di ==

    Per risolvere dovresti usare le espressioni regolari, quelle ti consentono di trovare un match parziale sulle stringhe.
    Per esempio

    Codice PHP:
    if ( preg_match('/^78.134.94/'$ip) )
    {
        
    // è un IP da bloccare
    }
    else
    {
        
    // IP buono

    Ultima modifica di Alhazred; 21-08-2015 a 12:23

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    EDIT
    Ultima modifica di Alhazred; 21-08-2015 a 12:21 Motivo: Doppio

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    24
    <?php
    $ip = $_SERVER['REMOTE_ADDR'];
    if ( preg_match('/^78.134.94/', $ip) )
    header("Location: http://");
    die();
    ?>

    Cosa ne pensate? Inoltre devo aggiungere altri ip: alcuni iniziano con 5.XX.XXX.XXX, altri con 94.XXX.XXX.XXX
    Per aggiungere gli ulteriori ip, devo continuare ad inserirli in questo modo: if ( preg_match('/^78.134.94/', '/^5.XX.XXX/, '/^5.XX.XXX/, $ip) ) ?

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Puoi anche leggere la documentazione di preg_match.
    Fossi in te creerei una tabella MySQL o un file .txt che conterebbe la lista degli IP da bannare. Altrimenti se devi modificare il file php ogni volta che vuoi aggiungerne altri sei messo male.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    24
    Salve. Ho optato per usare uno script java anzichè php. Per questo motivo continuo questa pubblicazione nel forum di competenza.

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.