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

    [ANTISPAM] nascondere gli indirizzi con PHP/Javascript

    Ciao a tutti,

    se vi siete stufati di ricevere spamming negli indirizzi e-mail che pubblicate nelle vostre pagine forse potete trovare utile questa soluzione.

    L'indirizzo e-mail viene criptato con PHP e decriptato con Javascript on-the-fly

    codice:
    class MailEncoder
    {
      function MailEncoder($baseString)
      {
          $this->baseStr = $baseString ;
          //separo la stringa in un array di caratteri
          $arrayChars = preg_split('//', $baseString, -1, PREG_SPLIT_NO_EMPTY);
          
          //ordino  l'array in modo casuale
          mt_srand((float)microtime() * 1000000);
          shuffle($arrayChars) ;
          
          //ricreo la stringa
          $this->encodedStr = implode('', $arrayChars) ;
      }
      
      function encode($mailAddr)
      {
        //"cripta" l'indirizzo
        $len = strlen($mailAddr) ;
        $crypted = '' ;
        for($i=0; $i<$len; $i++)
        {
           $crypted.= $this->encodedStr{strpos($this->baseStr, $mailAddr{$i})} ;
        }
        return($crypted) ;
      }
      
      function jsCode()
      {
         //il codice JS da inserire nell'head della pagina
         $jsStr = "var CONFIGkeyStr = '0123456789:@.-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ; \n
                   var ENCODEDStr = '{$this->encodedStr}' ; \n
                   function mailDecode(encodedMail)
                   {
                       var decoded = '' ;
    
    	           for(var i=0; i<encodedMail.length; i++)
                       {
                         decoded += CONFIGkeyStr.charAt(ENCODEDStr.indexOf(encodedMail.charAt(i))) ;
                       }
    	           return(decoded);
                   } \n
                   
                   function sendMail(encoded)
                   {
                      document.location.href='mailto:'+mailDecode(encoded) ;
                   } \n
                   
                   function viewMail(encoded)
                   {
                      return('Scrivi a ' + mailDecode(encoded)) ;
                   }
                   " ;
    
                  
         return($jsStr) ;
      }
      
      function jsLink($email, $text, $cssClass='')
      {
         //Genera il link con il mailto
          $encoded = $this->encode($email) ;
    
          $link = '<a href="javascript:void(0)" class="'.$cssClass.'"' .
          
                  ' onClick="sendMail(\''.$encoded.'\')" onMouseOver="this.title=viewMail(\''.$encoded.'\')" title=\'\'">' .
          
                  $text.'</a>';
          
          return($link) ;
      }
    }
    
    ?>
    Esempio

    codice:
    <?php
    include('MailEncoder.php') ;
    
    $CONFIGkeyStr = '0123456789:@.-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    
    $antispam = new MailEncoder($CONFIGkeyStr) ;
    
    ?>
    <html>
    <head>
    <script>
    <?php echo($antispam->jsCode()) ;?>
    </script>
    
    </head>
    <body>
    
    <?php echo $antispam->jsLink('tuo_indirizzo@host.it','cliccami','pippoCss') ?>
    </body>
    </html>
    Lo potete vedere operativo (in realtà in quel caso l'ho fatto po' diverso perchè freephp non utilizza PHP) negli articoli di freephp.html.it

    Fino a quando, spero mai, gli spider che cacciano indirizzi sul WEB non integreranno un motore Javascript, con questo sistema siamo al sicuro.
    per favore NIENTE PVT TECNICI da sconosciuti

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Interessante.

    Mi pare ci sia un refuso tra apici nella funzione jsLink, precisamente nella variabile $link.

    Per il resto mi pare una buona soluzione.

    Grazie. Andrebbe annoverata tra le pillole.


  3. #3
    Sì...il forum toglie i backslash quando si usano i tag per il codice

    class MailEncoder
    {
    function MailEncoder($baseString)
    {
    $this->baseStr = $baseString ;
    //separo la stringa in un array di caratteri
    $arrayChars = preg_split('//', $baseString, -1, PREG_SPLIT_NO_EMPTY);

    //ordino l'array in modo casuale
    mt_srand((float)microtime() * 1000000);
    shuffle($arrayChars) ;

    //ricreo la stringa
    $this->encodedStr = implode('', $arrayChars) ;
    }

    function encode($mailAddr)
    {
    //"cripta" l'indirizzo
    $len = strlen($mailAddr) ;
    $crypted = '' ;
    for($i=0; $i<$len; $i++)
    {
    $crypted.= $this->encodedStr{strpos($this->baseStr, $mailAddr{$i})} ;
    }
    return($crypted) ;
    }

    function jsCode()
    {
    //il codice JS da inserire nell'head della pagina
    $jsStr = "var CONFIGkeyStr = '0123456789:@.-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz' ; \n
    var ENCODEDStr = '{$this->encodedStr}' ; \n
    function mailDecode(encodedMail)
    {
    var decoded = '' ;

    for(var i=0; i<encodedMail.length; i++)
    {
    decoded += CONFIGkeyStr.charAt(ENCODEDStr.indexOf(encodedMail .charAt(i))) ;
    }
    return(decoded);
    } \n

    function sendMail(encoded)
    {
    document.location.href='mailto:'+mailDecode(encode d) ;
    } \n

    function viewMail(encoded)
    {
    return('Scrivi a ' + mailDecode(encoded)) ;
    }
    " ;


    return($jsStr) ;
    }

    function jsLink($email, $text, $cssClass='')
    {
    //Genera il link con il mailto
    $encoded = $this->encode($email) ;

    $link = '<a href="javascript:void(0)" class="'.$cssClass.'"' .

    ' onClick="sendMail(\''.$encoded.'\')" onMouseOver="this.title=viewMail(\''.$encoded.'\') " title=\'\'">' .

    $text.'</a>';

    return($link) ;
    }
    }
    per favore NIENTE PVT TECNICI da sconosciuti

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Perfetto. Difatti lo avevo definito "refuso" e mi pareva corretto fosse puntualizzato da te.


    Ripropongo di metterla in rilievo tra le pillole.


  5. #5
    Non è una vera e propria pillola, perchè non spiega come fare le cose, è una classetta pronta all'uso.
    Ad ogni modo spero che torni utile a chi come me non ne poteva più.

    Da quando su freephp è stato inserito il sistema, lo spam che arrivava sul mio indirizzo di posta si è praticamente azzerato.

    Aggiungo che se si vuole continuare a far vedere l'indirizzo e-mail si può sempre inserire in un'immagine e usarla nel link
    per favore NIENTE PVT TECNICI da sconosciuti

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.