Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Preenire Flooding con indirizzo ip

    Ciao a tutti, volevo chiedervi se esiste un modo per prevenire un doppio post registrando l'indirzzo ip dell'utente, e quindi se lo stesso cerca di postare un altra volta, calcolo:

    l'ora in cui è stato postato il primo: e lo inserisco nel DB
    l'indirizzo dell'utente: e lo inserisco nel DB
    l'ora in cui è stato postato il secondo,

    quindi
    se (indirizzoIP) ha postato alle 14'00"00 e sta tentando di ri-postare alle 14'01"10, mostro un msg di errore, ma non saprei come fare.

    Cookie?Sessioni?

    grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    non so se ho capito bene...

    ma esiste una fase di login prima di postare un messaggio? Oppure chiunque può inserire un messaggio?

    ciao MAX
    http://www.mdlwork.com

  3. #3
    è un semplice sistema di commenti

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ...

    ...allora, se non c'è una fase di login, credo che il miglior modo sia impostare una sessione al momento che l'utente scrive un messaggio, salvando data e ora.

    Puoi eseguire un codice simile a questo, al momento del submit:

    Codice PHP:
    <?php
    session_start
    ();
    if (empty(
    $_SESSION['dataora'])) {
       
    $_SESSION['dataora'] = date("Y-m-d H:m:s");
    } else {
       
    dateControl($_SESSION['dataora'],date("Y-m-d H:m:s"));
    }
    ?>
    Ovviamente devi creare la funzione dateControl che confronta le due date e che eventualmente da errore

    Ciao Max
    http://www.mdlwork.com

  5. #5
    Grazie farò cosi
    solo che ancora non sono riuscito a capire bene le funzioni potresti farm solo un'esempio?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ...

    Sandro ti ho fatto una funzioncina:

    Codice PHP:
    <?php
     
    session_start
    (); 
    if (empty(
    $_SESSION['dataora'])) { 
       
    $_SESSION['dataora'] = date("Y-m-d H:i:s"); 
    } else { 
       
    dateControl($_SESSION['dataora'],date("Y-m-d H:i:s")); 


    function 
    dateControl($dateSes,$dateNow){
     
      
    $timeLimit 120// equivale a 2 minuti
      
      //print($dateSes."
    ");
      //print(
    $dateNow."
    ");
      
      list(
    $dt1,$tm1) = explode(" ",$dateSes);
      list(
    $y1,$m1,$d1) = explode("-",$dt1);
      list(
    $h1,$i1,$s1) = explode(":",$tm1);
      
      list(
    $dt2,$tm2) = explode(" ",$dateNow);
      list(
    $y2,$m2,$d2) = explode("-",$dt2);
      list(
    $h2,$i2,$s2) = explode(":",$tm2);
      
      // int mktime ([ int 
    $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
      
    $data1 = mktime($h1,$i1,$s1,$d1,$m1,$y1);
      
    $data2 = mktime($h2,$i2,$s2,$d2,$m2,$y2);
     
      //print(
    $data1."
    ");
      //print(
    $data2."
    ");
     
      
    $diff = ($data2-$data1);
      //print(
    $diff);
      if(
    $diff < $timeLimit){
        // vai alla pagina di errore
        //echo "
    errore";
      }
    }
    ?>

    I commenti li ho lasciati così provi e vedi cosa succede.

    $timeLimit è il tempo limite, ho impostato a 2 minuti (120 secondi) e puoi quindi diminuirlo o aumentralo.

    devi aggiungere il redirect alla pagina di errore, ciao Max
    http://www.mdlwork.com

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ops...

    ho dimenticato che devi aggiungere il risettaggio della data:

    Codice PHP:
    $_SESSION['dataora'] = date("Y-m-d H:i:s"); 
    ricopio la funzione:

    <?php

    session_start();
    if (empty($_SESSION['dataora'])) {
    $_SESSION['dataora'] = date("Y-m-d H:i:s");
    } else {
    dateControl($_SESSION['dataora'],date("Y-m-d H:i:s"));
    }

    function dateControl($dateSes,$dateNow){

    $timeLimit = 120; // equivale a 2 minuti

    //print($dateSes."
    ");
    //print($dateNow."
    ");

    list($dt1,$tm1) = explode(" ",$dateSes);
    list($y1,$m1,$d1) = explode("-",$dt1);
    list($h1,$i1,$s1) = explode(":",$tm1);

    list($dt2,$tm2) = explode(" ",$dateNow);
    list($y2,$m2,$d2) = explode("-",$dt2);
    list($h2,$i2,$s2) = explode(":",$tm2);

    // int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
    $data1 = mktime($h1,$i1,$s1,$d1,$m1,$y1);
    $data2 = mktime($h2,$i2,$s2,$d2,$m2,$y2);

    //print($data1."
    ");
    //print($data2."
    ");

    $diff = ($data2-$data1);
    //print($diff);
    if($diff < $timeLimit){
    // vai alla pagina di errore
    //echo "errore";
    }else{
    $_SESSION['dataora'] = date("Y-m-d H:i:s");
    }
    }
    ?>
    http://www.mdlwork.com

  8. #8
    uhm.. utile utile credo che la userò anche io! grazie!
    dopo la guardo per bene... ma non conveniva usare date con un timestamp?! o.O almeno dovevi solo fare un semplice conto... boh, sto solo "vomitando" idee, non darmi retta!
    grazie ancora
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  9. #9
    Credo che ogni "idea" potrebbe far comodo

    cmq max lo sto provando fra un pò ti dirò come va

  10. #10
    niente

    non riesco ad implementarlo

    questo è come l'ho impostato io, ma praticamente se i campi sono vuoti o non validi continua con lo script e non inserisce nulla, ma la sessione , al refresh della pagina c'è ed esiste.

    Codice PHP:
    <?
    function dateControl($dateSes,$dateNow){

      
    $timeLimit 120;
      
      list(
    $dt1,$tm1) = explode(" ",$dateSes);
      list(
    $y1,$m1,$d1) = explode("-",$dt1);
      list(
    $h1,$i1,$s1) = explode(":",$tm1);
      
      list(
    $dt2,$tm2) = explode(" ",$dateNow);
      list(
    $y2,$m2,$d2) = explode("-",$dt2);
      list(
    $h2,$i2,$s2) = explode(":",$tm2);
      
      
    // int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
      
    $data1 mktime($h1,$i1,$s1,$d1,$m1,$y1);
      
    $data2 mktime($h2,$i2,$s2,$d2,$m2,$y2);


      
    $diff = ($data2-$data1);

      if(
    $diff $timeLimit){

        echo 
    "Il tempo minimo di attesa fra un commento e l'altro è di 2 minuti !";
      }
    }

    if (empty(
    $_SESSION['dataora'])) {//se la sessione non esiste...
                   
    $_SESSION['dataora'] = date("Y-m-d H:i:s");//la creo con l'attuale orario
                
    //se è stato premuto il tasto d'invio...
    if(isset($_POST['insert'])) {

                
    //controllo se è stato scritto l'username.
        
    if($username) {
            }else {
            
    $error[] = $msg['empty_username'];
            }
    // fine controllo username.
            
        //controllo se l'email immessa corrisponde sia vaida.
        
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"$email)) {
            }else {
            
    $error[] = $msg['invalid_email'];
            }
    // fine controllo email.
        
        //controllo se è stato scritto il commento.
        
    if($comment) {
            }else {
            
    $error[] = $msg['empty_msg'];
            }
    // fine controllo commento.
            
        //controllo se il codice immesso corrisponde all'imagine.
        
    if (PhpCaptcha::Validate(@$_POST['postcode'])) {
          } else {
           
    $error[] = $msg['invalid_code'];
           }
    // fine controllo captcha.
        
    if ($error) {
        echo 
    "<h2>ERRORE</h2>"
        
            foreach (
    $error as $err) {
                echo 
    "[*]".$err."";
                }
                
            }else {
    // inserisco i dati nel db.
            
    $query "INSERT INTO comment (id, pag, nome, email, commento) VALUES ('', '$currentFile', '$username', '$email', '$comment')";
            if (!
    mysql_query($query,$conn)) {
                  die(
    'Errore: ' mysql_error());
                  }
        echo 
    "Il Commento è stato aggiunto";
        
        }

     
     
    ?>


    <form method="post" action="<? $_SERVER['PHP_SELF'?>" name="form">
    <table width="404" height="263" border="0" cellpadding="1" cellspacing="1">
      <tr>
        <td height="36" colspan="2">
        <input type="text" name="postusername" value="<?=(@$_POST['postusername'])?>">Username
        </td>
        </tr>
      <tr>
        <td height="32" colspan="2">
        <input type="text" name="postemail" value="<?=(@$_POST['postemail'])?>">Email
        </td>
        </tr>
      <tr>
        <td width="226" height="24">
        <textarea rows="8" cols="35" name="postcomment" value="" ><?=(@$_POST['postcomment'])?>
    </textarea>
        </td>
        <td width="171">Commento</td>
      </tr>
      <tr>
        <td height="3" colspan="2">
        

    [img]captcha/output.php[/img]</p>
        </td>
      </tr>
      <tr>
        <td height="4" colspan="2">
        <input type="text" name="postcode">Codice di verifica
        </td>
        </tr>
      <tr>
        <td height="11" colspan="2">
        <input type="submit" name="insert" value="Invia">
        </td>
      </tr>
    </table>
    </form> 

                
    <? }

    else {
    dateControl($_SESSION['dataora'],date("Y-m-d H:i:s"));

    ?>

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.