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

Discussione: BRUTE? No, grazie.

  1. #1

    BRUTE? No, grazie.

    Supponiamo che io abbia una pagina dove i visitatori, per accedervi, devono fare il login.
    E se a qualche furbastro venisse in mente di usare un bel bruteforce?

    Come dovrebbe essere uno script di protezione?

    Cioè che si segna l'IP;
    Si segna il n. di tentativi;

    e se il n supera un limite dato nell'arco di 15 min, gli dà accesso negato?

  2. #2
    è uno script fattibile, come dici tu tenendo il trace dell' IP eviti qulunque intrusione...
    se ti serve una programmazione di questo tipo, fammi sapere...

    un' esempio di questo tipo di protezione sviluppato da me lo puoi trovare al sito www.digi-tech.it ----> area riservata

    Fammi sapere


    Ciao

    Marco
    Marco Chirico
    Applicazioni Server Side
    http://www.fdesigngroup.it

  3. #3
    se il login è corretto abiliti l'utente
    altrimenti inserisci un record nel database (id record, ip, timestamp)

    al login cancelli tutti i tentativi più vecchi di time()-3600

    poi fai una SELECT DISTINCT per ip e se hai più di n record blocchi lo script

  4. #4
    Ragazzi, grazie per la disponibilità, ma io col mySql non vado proprio d'accordo...

    Non è che potete postare proprio qualche riga di codice?


    Poi, non sarebbe male come PILLOLA.....

  5. #5
    ecco cosa ho tirato fuori
    Codice PHP:
    <?php
    $ip 
    getenv('REMOTE_ADDR');
    //connessione al db e scelta tabella
    $mc mysql_connect('x','x','x');
    $db mysql_select_db('IP_LOG');
    //lettura dei campi IP, TRY e TIME
    $query "SELECT IP,TRY,TIME FROM IP_LOG WHERE IP== $ip";
    $risultato mysql_query($query);
    //fissaggio dei dati ad altrettante variabili
    $dati = @mysql_fetch_array($risultato);
    list( 
    $ipl$TRY$TIME) = $dati;
    //se l'ip è già stato loggato
    if ($ip == $ipl) {
    //tempo trascorso dall'ultima visita
     
    $gap date(Ymdhis) - $TIME;
     
    //se il numero di tentativi è superiore a 12 e il tempo trascorso è inferiore ai 15 min blocca l'esecuzione
        
    if( $TRY >12 && $gap 00000000001500) {
        
    //todo: cambiare con un messaggio di errore personalizzato
             
    echo "lol, troppe volte, in troppo poco tempo";
            
    mysql_close($mc);
             exit;
            
    //se il numero di tentativi è inferiore o uguale a 12 e il tempo trascorso è inferiore ai 15 min incrementa di 1 il n di tentativi
            
    } elseif($TRY<=12 && $gap 00000000001500){
                
    $query "UPDATE IP_LOG SET TRY = $TRY+1 WHERE IP = $ip";
                
    $query_exec mysql_query($query);
                
    mysql_close($mc);
                exit;
                
    //se il tempo trascorso è superiore o uguale ai 15 min azzera il contatore
            
    } elseif($gap >= 00000000001500) {
                
    $query "UPDATE IP_LOG SET TRY =0  WHERE IP = $ip";
                
    $query_execmysql_query($query);
                
    mysql_close($mc);
                exit;
            }
            
    //se l'ip non è ancora stato loggato 
        
    }else{
            
    $time_now date(Ymdhis);
            
    $query "INSERT INTO IP_LOG(IP,TRY,TIME) VALUES($ip,'1',$time_now)";
            
    $query_exec mysql_query($query);
            exit;
        }
        
    //pulizia degli ip ormai in disuso da più di 7gg
    $max_log_time date(Ymdhis) - 00000007000000;
    $query "DELETE FROM IP_LOG IP,TRY,TIME WHERE TIME < $max_log_time";
    $query_exec mysql_query($query);
    mysql_close($mc);
    exit;
    ?>
    Ma come mai non funziona? ho fatto qualche errore di concetto, o proprio di codice?

    ho provato a farlo andare, ma non fà nulla, non mi aggiunge neanche l'ip alla lista degli ip nel db.
    ho provato anche ad immettere a mano il mio ip nella tabella, ma non me lo riconosce...

    Dov'è il problema!?!

  6. #6
    Provalo così e fammi sapere

    Codice PHP:
    <?php
    $ip 
    getenv('REMOTE_ADDR');
    //connessione al db e scelta tabella
    $mc mysql_connect('x','x','x');
    $db mysql_select_db('IP_LOG');
    //lettura dei campi IP, TRY e TIME
    $query "SELECT IP,TRY,TIME FROM IP_LOG WHERE IP= '$ip'";
    $risultato mysql_query($query);
    //fissaggio dei dati ad altrettante variabili
    $dati = @mysql_fetch_array($risultato);
    list( 
    $ipl$TRY$TIME) = $dati;
    //se l'ip è già stato loggato
    if ($ip == $ipl) {
    //tempo trascorso dall'ultima visita
    $gap date(Ymdhis) - $TIME;
    //se il numero di tentativi è superiore a 12 e il tempo trascorso è inferiore ai 15 min blocca l'esecuzione
        
    if( $TRY >12 && $gap 00000000001500) {
        
    //todo: cambiare con un messaggio di errore personalizzato
            
    echo "lol, troppe volte, in troppo poco tempo";
            
    mysql_close($mc);
             exit;
            
    //se il numero di tentativi è inferiore o uguale a 12 e il tempo trascorso è inferiore ai 15 min incrementa di 1 il n di tentativi
            
    } elseif($TRY<=12 && $gap 00000000001500){
    $trye $TRY+1;
                
    $query "UPDATE IP_LOG SET TRY = '$trye' WHERE IP = '$ip'";
                
    $query_exec mysql_query($query);
                
    mysql_close($mc);
                exit;
                
    //se il tempo trascorso è superiore o uguale ai 15 min azzera il contatore
            
    } elseif($gap >= 00000000001500) {
                
    $query "UPDATE IP_LOG SET TRY ='0'  WHERE IP = '$ip'";
                
    $query_execmysql_query($query);
                
    mysql_close($mc);
                exit;
            }
            
    //se l'ip non è ancora stato loggato
        
    }else{
            
    $time_now date(Ymdhis);
            
    $query "INSERT INTO IP_LOG(IP,TRY,TIME) VALUES('$ip','1','$time_now')";
            
    $query_exec mysql_query($query);
            exit;
        }
        
    //pulizia degli ip ormai in disuso da più di 7gg
    $max_log_time date(Ymdhis) - 00000007000000;
    $query "DELETE FROM IP_LOG IP,TRY,TIME WHERE TIME < $max_log_time";
    $query_exec mysql_query($query);
    mysql_close($mc);
    exit;
    ?>

  7. #7
    Nulla, anche mettendo gli apici, non cambia nulla...



    Ma che cavolo! :master:

  8. #8
    Retifico, mettendo gli apici, risolvo in parte:

    Mi aggiunge l'ip nella tabella, ma non me li riconosce, e quindi, quando provo ad accedere alla pagina, mi aggiunge inesorabilmente un nuovo record.

    L'eroore che mi dà (sempre) è

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

    dato che ho tolto la @.
    quindi credo che tutto il problema stia nel riconoscimento dell'ip.

    io nella tabella ho messo come text il campo IP, che sia li il problema?

    ah, e ho corretto anche altra roba, che prima era sbagliata:
    Codice PHP:
    <?php
    $ip 
    getenv('REMOTE_ADDR');
    //connessione al db e scelta tabella
    $mc mysql_connect('X','X','X');
    $db mysql_select_db('X');
    //lettura dei campi IP, TRY e TIME
    $query "SELECT IP,TRY,TIME FROM IP_LOG WHERE IP == '$ip'";
    $risultato mysql_query($query);
    //fissaggio dei dati ad altrettante variabili
    $dati = @mysql_fetch_array($risultato);
    list( 
    $ipl$TRY$TIME) = $dati;
    //se l'ip è già stato loggato
    if ($ip == $ipl) {
    //tempo trascorso dall'ultima visita
     
    $gap date(Ymdhis) - $TIME;
     echo 
    $gap;
     
    //se il numero di tentativi è superiore a 12 e il tempo trascorso è inferiore ai 15 min blocca l'esecuzione
        
    if( $TRY >12 && $gap 00000000001500) {
        
    //todo: cambiare con un messaggio di errore personalizzato
             
    echo "lol, troppe volte, in troppo poco tempo";
            
    mysql_close($mc);
             exit;
            
    //se il numero di tentativi è inferiore o uguale a 12 e il tempo trascorso è inferiore ai 15 min incrementa di 1 il n di tentativi
            
    } elseif($TRY<=12 && $gap 00000000001500){
                
    $query "UPDATE IP_LOG SET TRY = '$TRY'+1 WHERE IP == '$ip'";
                
    $query_exec mysql_query($query);
                
    mysql_close($mc);
                exit;
                
    //se il tempo trascorso è superiore o uguale ai 15 min azzera il contatore
            
    } elseif($gap >= 00000000001500) {
                
    $query "UPDATE IP_LOG SET TRY =0  WHERE IP == '$ip'";
                
    $query_execmysql_query($query);
                
    mysql_close($mc);
                exit;
            }
            
    //se l'ip non è ancora stato loggato 
        
    }else{
            
    $time_now date(Ymdhis);
            
    $query "INSERT INTO IP_LOG(IP,TRY,TIME) VALUES('$ip','1','$time_now')";
            
    $query_exec mysql_query($query);
            
    mysql_close($mc);
            exit;
        }
        
    //pulizia degli ip ormai in disuso da più di 7gg
    $max_log_time date(Ymdhis) - 00000007000000;
    $query "DELETE FROM IP_LOG IP,TRY,TIME WHERE TIME < '$max_log_time'";
    $query_exec mysql_query($query);
    mysql_close($mc);
    exit;
    ?>
    Dannazzione, perchè? :master:

  9. #9
    Prova con un solo =

    Codice PHP:
    $query "SELECT IP,TRY,TIME FROM IP_LOG WHERE IP = '$ip'"
    e poi prova la stessa query anche da phpmyadmin magari te la corregge per bene

  10. #10
    Mi correggo... Hai usato il doppio == in tutte le query, quindi prova proprio questo che ti scrivo io:

    Codice PHP:
    <?php
    $ip 
    getenv('REMOTE_ADDR');
    //connessione al db e scelta tabella
    $mc mysql_connect('x','x','x');
    $db mysql_select_db('IP_LOG');
    //lettura dei campi IP, TRY e TIME
    $query "SELECT IP,TRY,TIME FROM IP_LOG WHERE IP= '$ip'";
    $risultato mysql_query($query);
    //fissaggio dei dati ad altrettante variabili
    $dati = @mysql_fetch_array($risultato);
    list( 
    $ipl$TRY$TIME) = $dati;
    //se l'ip è già stato loggato
    if ($ip == $ipl) {
    //tempo trascorso dall'ultima visita
    $gap date(Ymdhis) - $TIME;
    //se il numero di tentativi è superiore a 12 e il tempo trascorso è inferiore ai 15 min blocca l'esecuzione
        
    if( $TRY >12 && $gap 00000000001500) {
        
    //todo: cambiare con un messaggio di errore personalizzato
            
    echo "lol, troppe volte, in troppo poco tempo";
            
    mysql_close($mc);
             exit;
            
    //se il numero di tentativi è inferiore o uguale a 12 e il tempo trascorso è inferiore ai 15 min incrementa di 1 il n di tentativi
            
    } elseif($TRY<=12 && $gap 00000000001500){
    $trye $TRY+1;
                
    $query "UPDATE IP_LOG SET TRY = '$trye' WHERE IP = '$ip'";
                
    $query_exec mysql_query($query);
                
    mysql_close($mc);
                exit;
                
    //se il tempo trascorso è superiore o uguale ai 15 min azzera il contatore
            
    } elseif($gap >= 00000000001500) {
                
    $query "UPDATE IP_LOG SET TRY ='0'  WHERE IP = '$ip'";
                
    $query_execmysql_query($query);
                
    mysql_close($mc);
                exit;
            }
            
    //se l'ip non è ancora stato loggato
        
    }else{
            
    $time_now date(Ymdhis);
            
    $query "INSERT INTO IP_LOG(IP,TRY,TIME) VALUES('$ip','1','$time_now')";
            
    $query_exec mysql_query($query);
            exit;
        }
        
    //pulizia degli ip ormai in disuso da più di 7gg
    $max_log_time date(Ymdhis) - 00000007000000;
    $query "DELETE FROM IP_LOG IP,TRY,TIME WHERE TIME < $max_log_time";
    $query_exec mysql_query($query);
    mysql_close($mc);
    exit;
    ?>

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.