TTJ #003 Una classe antispam

Transcript

TTJ #003 Una classe antispam
> TTJ #003 Una classe antispam Spesso, per evitare lo spam, si usa sostituire la @ con altre combinazioni di caratteri che non rivelano immediatamente un indirizzo di posta elettronica. Per esempio, una tecnica molto utilizzata è quella di rimpiazzare la chiocciolia con [at] e ciò permette di prevenire lo spam da parte di sistemi automatici che (90 su 100) non sono in grado di interpretare Javascript. L'idea è quindi di creare una classe che si faccia carico di individuare le email nell'HTML sostituendo la @ con [at] salvo inserire codice Javascript che rimetta le cose a posto. Tutto possibilmente senza interferire più di tanto nel codice preesistente. Supponiamo di salvare la nostra classe in myantispam.php <?
class myantispam{
/**
* il costruttore avvia cattura flusso output
*/
function __construct() {
ob_start();
}
/**
* quando lo script non ha più handles attivi viene invocato questo metodo che
* lancia sendHTML su quanto catturato
*/
function __destruct() {
myantispam::sendHtml(ob_get_clean());
}
/**
* questo metodo sostituisce alle email trovate nell’html la string [at] ma
* aggiunge anche all’html un javascript che ricostituisce gli [at] con @
*
* @param string $html
*/
static function sendHtml($html='') {
$html=preg_replace('/([a-z0-9\\.\\_\\%\\+\\-]+)@([a-z0-9\\.\\-]+\.(?:[az]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum))/im','\\1[at]\\2',$html);
$html=str_ireplace(array('<body','</body>'),
array('<body onload="myantispam()"',
'<script type="text/javascript">
Zend Technologies srl Largo Richini, 6 20122 Milano Telefono: +39 02 5821 5832 Fax: +39 02 5821 5400 ©Zend Technologies, Inc. Visita il sito www.zend.com/it Pagina 1 di 2 function myantispam(){
document.body.innerHTML=document.body.innerHTML.replace(/\\[at\\]/g,"@");
document.body.innerHTML=document.body.innerHTML.replace(/%5Bat%5D/g,"@");
}
</script>
</body>'),$html);
echo $html;
}
}
?>
La si può usare in due modi: (1) Esplicito, si invoca il metodo sendHtml passando l’HTML da pulire <?
Include(‘myantispam.php’);
//non istanziare la classe
Myantispam::sendHtml(’<html>
<body>
Script originale a
<a href="mailto:[email protected]">[email protected]</a>
</body>
</html>‘);
?>
(2) Trasparente, basta istanziare la classe all’inizio dello script e fa tutto lei <? Include(‘myantispam.php’);
$antispam=new myantispam();//inizia a catturare flusso output
//importante che l’oggetto si associato ad una variabile,
// così quando lo script termina il distruttore invoca la sendHtml sul html catturato
?>
<html>
<body>
Script originale a
<a href="mailto:[email protected]">[email protected]</a>
</body>
</html>
Zend Technologies srl Largo Richini, 6 20122 Milano Telefono: +39 02 5821 5832 Fax: +39 02 5821 5400 ©Zend Technologies, Inc. Visita il sito www.zend.com/it Pagina 2 di 2