Vai a: [ Contenuti ] [ Categorie ] [ Cerca ]

Rivisitazione della tecnica "honeypot" per moduli antispam senza captcha - UPDATE

Rivisitazione della tecnica “honeypot” per moduli antispam senza captcha – UPDATE


La pagina di invio

La pagina di invio prevede delle verifiche sui campi in arrivo. Il codice è stato volutamente scritto separando ogni controllo per illustrare meglio i passi eseguiti; anche in caso di spam conclamato verrà inviata una email a scopo di debug. È ovvio che un codice di produzione dovrà essere rivisto in maniera più razionale.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
/*
 * Filename:	result1.php
 */
$now 	= time();
$minsec	= 2;
 
// il metodo di invio è post
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 
	// esiste il campo con la data e non è vuoto
	if (!empty($_POST['formtime'])) {
 
		//  il campo con la data è numerico
		if (is_numeric($_POST['formtime'])) {
 
			// la data di invio è futura rispetto a quella del form
			if ($now > $_POST['formtime']) {
 
				// il tempo trascorso tra il caricamento e l'invio è maggiore di n secondi
				if (($now - $_POST['formtime']) > $minsec) {
 
					// il campo fake è vuoto
					if (isset($_POST['name']) && empty($_POST['name'])) {
 
						$result = "messaggio scritto da umani";
 
					} else {
 
						$result = "bot: riempito campo fake o mancante";
					}
 
				} else {
 
					$result = "bot: troppo veloce - tempo di invio: " .($now - $_POST['formtime']). " secondi";
				}
 
			} else {
 
				$result = "bot: troppo veloce - tempo: futuro";
			}
 
		} else {
 
			$result = "bot: time manomesso";
		}
 
	} else {
 
		$result = "bot: manca timestamp";
	}
 
} else {
 
	$result = "bot: la request è diversa da POST";
}
 
/**************** INVIO EMAIL ******************/
$dest         = "tuaemail@provider.com";
$headers 	 = "X-Mailer: PHP ".phpversion()."\n";
$headers 	.= "From: $_POST[email] <$_POST[email]>\n";
$headers 	.= "Return-Path: $dest <$dest>\n";
$headers 	.= "Reply-To: $dest <$dest>\n";
$headers 	.= "Date: ".date("H:i:s")." ".date("d/m/Y")."\n";
$headers 	.= "Delivered-to: $dest <$dest>\n";
$headers	.= "MIME-Version: 1.0\n";
$corpo	 	 = "ora invio: " .$now. "\n ora form: " .$_POST['formtime']. "\r\n" .stripslashes($_POST["message"]);
if (isset($_POST["name"]) && !empty($_POST["name"])) {
$corpo		.= "\r\n honeypot:" .stripslashes($_POST["name"]);
}
 
//invio dell'email
mail($dest,$_POST['host']." ".$result,$corpo,$headers);
 
echo $result;
 
?>

La variabile “$minsec” indica i secondi che devono passare tra la visualizzazione del form e l’invio. Il valore ottimale si ottiene valutando caso per caso: è ovvio che su un modulo di un solo campo senza validazione obbligatoria, anche 1 secondo potrebbe generare molti falsi positivi. In genere 2 secondi dovrebbe essere un buon compromesso.

I successivi controlli sono abbastanza chiari. Sostanzialmente si verifica che:

  • il metodo di invio sia POST
  • il campo “formtime” esista e non sia vuoto
  • il campo “formtime” sia numerico
  • il campo “formtime” sia inferiore alla data di invio
  • il tempo trascorso tra la visualizzazione del form e l’invio non deve essere inferiore a “$minsec”
  • il campo “name” deve esistere ed essere vuoto

Superati questi controlli allora si può procedere con l’invio del modulo.

Prima di passare allo step successivo, alcune considerazioni su questo esempio.

Il beneficio principale è, probabilmente, la velocità di implementazione. I controlli inseriti sono banali e non richiedono molta logica. Di contro, a tanta semplicità, si contrappone una situazione abbastanza vantaggiosa per uno spammer professionista che, con un po’ di pazienza e con il tasto “indietro”, potrà effettuare invii multipli senza troppe difficoltà. Tra l’altro il non aver reso random il nome del campo “honeypot” di certo favorisce i software malintezionati.

È necessario, quindi, introdurre qualche controllo aggiuntivo.

Pagina: 1 2 3 4 5 6 7 8

link sponsorizzati

Consiglialo su Facebook

Scrivi un commento

Commenti totali: 2


  1. bell’articolo! complimenti!!!

  2. l’ho provato e funziona bene come tecnica

Lascia un Commento

Subscribe without commenting

Torna: [ Inizio ] [ Contenuti ] [ Categorie ] [ Cerca ]

Pagina renderizzata in soli 0,102 secondi dopo aver eseguito ben 0 query. Wordpress... prestazioni da urlo!