PDA

View Full Version : [PHP] Tracciare "vagamente" chi mi compila il form si può?!


Matrixbob
31-10-2006, 11:20
... ovviamente per motivi di sicurezza, dato che lo usano x spamare od insultare.
Quindi indicativamente vorrei allegare alla email inviata dal form anche dati poco sensibili come:
IP
SO
Browser
etc ...

Qualsiasi cosa mi posso indicare quello che potrebbe essere 1 amico che fa scherzi o 1 maniaco del cavolo.

Per ora il form si presenta così:
http://img250.imageshack.us/img250/8483/formwe0.jpg

andbin
31-10-2006, 11:34
Quindi indicativamente vorrei allegare alla email inviata dal form anche dati poco sensibili come:
IP
SO
Browser
etc ...
Potresti innanzitutto mettere un "captcha", cioè la classica immaginetta con numeri e/o lettere da ricopiare in un campo.
Poi in PHP puoi certamente avere delle informazioni sul client. Non so cosa usi per inviare la email (la funzione mail() credo). Io quando invio una email da un form, aggiungo degli header da passare alla mail() in questo modo:
$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";

Matrixbob
31-10-2006, 11:47
Potresti innanzitutto mettere un "captcha", cioè la classica immaginetta con numeri e/o lettere da ricopiare in un campo.
Poi in PHP puoi certamente avere delle informazioni sul client. Non so cosa usi per inviare la email (la funzione mail() credo). Io quando invio una email da un form, aggiungo degli header da passare alla mail() in questo modo:
$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
Mmm captcha forse non è ancora tempo.
Per quanto riguarda il mailer penso sia inutile perchè il mailer è quello di ARUBA, quindi prenderei indicazioni su di lui, ma non mi interessano quelle. :)

andbin
31-10-2006, 11:55
Per quanto riguarda il mailer penso sia inutile perchè il mailer è quello di ARUBA, quindi prenderei indicazioni su di lui, ma non mi interessano quelle. :)REMOTE_ADDR, REMOTE_PORT e HTTP_USER_AGENT sono informazioni sul client, non sul server.

Matrixbob
02-11-2006, 13:01
Io quando invio una email da un form, aggiungo degli header da passare alla mail() in questo modo:

$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";


Io solitamente uso fare così:

$destinatario = "metto@email.qui";
$oggetto = ">> bla bla bla <<";
$testo = "\nPer dire:\n\n $textarea\n\n\n$email";
mail($destinatario, $oggetto, $testo);


Dove li aggiungo quelle 3 ridefinizione di headers che mi proponi?
Ma poi in quella magnera non si ri-sovrascrive la variabile?! :eek:

andbin
02-11-2006, 13:15
Dove li aggiungo quelle 3 ridefinizione di headers che mi proponi?
Ma poi in quella magnera non si ri-sovrascrive la variabile?! :eek:Se leggi bene la documentazione della mail(), vedi che c'è un quarto parametro opzionale 'additional_headers'.

Matrixbob
02-11-2006, 13:19
Se leggi bene la documentazione della mail(), vedi che c'è un quarto parametro opzionale 'additional_headers'.
Probabilmente stanno lavorando sulla mia linea dato che non riesco a raggiungere google o excite.
MAgari è dovuto al passaggio da Alice 4M ad Alice 20M.
Provo a cercare il manuale su yahoo che invece raggiungo.

Matrixbob
02-11-2006, 13:23
Supponendo che quell oche fai in $headers sia solo 1 concatenamento di stringhe a quello che già c'è, allora ho solamente aggiunto così:

mail($destinatario, $oggetto, $testo, $headers);

andbin
02-11-2006, 13:28
Probabilmente stanno lavorando sulla mia linea dato che non riesco a raggiungere google o excite.
MAgari è dovuto al passaggio da Alice 4M ad Alice 20M.
Provo a cercare il manuale su yahoo che invece raggiungo.Scusa ma ... scaricare il manuale del PHP per averlo offline ad esempio in formato "Extended HTML Help", no??? :p
È comodissimo!!! :)

Matrixbob
02-11-2006, 13:34
Scusa ma ... scaricare il manuale del PHP per averlo offline ad esempio in formato "Extended HTML Help", no??? :p
È comodissimo!!! :)
OK sto scaricando, non c'avevo + pesato da quando ho l'ADSL, prima col 56K lo potevi dire forte! :D

Ora uso questa sintassi, ma non funziona:

$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
$destinatario = "metto@email.qui";
$oggetto = ">> blablabla <<";
$testo = "\nPer dire:\n\n $textarea\n\n\n$email";
mail($destinatario, $oggetto, $testo, $headers);

andbin
02-11-2006, 13:43
OK sto scaricando, non c'avevo + pesato da quando ho l'ADSL, prima col 56K lo potevi dire forte! :D

Ora uso questa sintassi, ma non funziona:Nota che ho usato la concatenazione/assegnazione .=
Il primo dovrebbe essere solo una assegnazione. Inoltre (e questo lo spiega bene il manuale ;) ) dovresti mettere negli header anche il "From:", se il From non è già impostato nel php.ini.

Matrixbob
02-11-2006, 14:01
Nemmeno così funziona:

$headers = "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" .
"Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n";
$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
$destinatario = "metto@email.qui";
$oggetto = ">> blabla <<";
$testo = "\nPer dire:\n\n $textarea\n\n\n$email";
mail($destinatario, $oggetto, $testo, $headers);


Nel senso che l'email arriva, ma non vedo le info suplementari:

$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\r\n";
$headers .= "X-Sender-Port: " . $_SERVER['REMOTE_PORT'] . "\r\n";
$headers .= "X-UserAgent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";

Il server è 1 server Aruba.

andbin
02-11-2006, 14:05
Nel senso che l'email arriva, ma non vedo le info suplementari.Le info in più non sono ovviamente nel corpo del messaggio ma nelle intestazioni. Se usi un client di posta es. Outlook e simili, dovrebbe permetterti di vedere tutte le intestazioni o anche il sorgente completo della email.

Matrixbob
02-11-2006, 14:18
Le info in più non sono ovviamente nel corpo del messaggio ma nelle intestazioni. Se usi un client di posta es. Outlook e simili, dovrebbe permetterti di vedere tutte le intestazioni o anche il sorgente completo della email.
OK ho fatto che metterli nel corpo ed adesso vedo tutto.
TNX!

andbin
02-11-2006, 14:37
OK ho fatto che metterli nel corpo ed adesso vedo tutto.
TNX!Vabbè ... potevi dirlo prima che volevi vedere subito tutte le info aggiuntive nel messaggio. ;)

Matrixbob
02-11-2006, 14:40
Vabbè ... potevi dirlo prima che volevi vedere subito tutte le info aggiuntive nel messaggio. ;)
Altri dati sul client interessanti non c'è ne sono?
Solo quei 3?

andbin
02-11-2006, 14:47
Altri dati sul client interessanti non c'è ne sono?
Solo quei 3?Beh, dipende da cosa vuoi sapere. Prova ad esempio il mio tool online Browser Check (http://andbin.altervista.org/tools/browsercheck.php). Quali ti servirebbero??

Ad esempio facendo in PHP:
$remote_host = gethostbyaddr ($_SERVER['REMOTE_ADDR']);
ottieni l'host name del client.

Matrixbob
02-11-2006, 15:28
Beh, dipende da cosa vuoi sapere. Prova ad esempio il mio tool online Browser Check (http://andbin.altervista.org/tools/browsercheck.php). Quali ti servirebbero??

Ad esempio facendo in PHP:
$remote_host = gethostbyaddr ($_SERVER['REMOTE_ADDR']);
ottieni l'host name del client.
WOW che figata!
Come hostname mi esce quello virtuale di mamma Telecoz?!
host165-65-dynamic.2-87-r.retail.telecomitalia.it

andbin
02-11-2006, 15:36
Come hostname mi esce quello virtuale di mamma Telecoz?!Sì, in generale il nome dell'host assegnato dal provider.
Comunque di quali altre info avresti bisogno?

Matrixbob
02-11-2006, 15:38
Sì, in generale il nome dell'host assegnato dal provider.
Comunque di quali altre info avresti bisogno?
Niente, direi che sono a posto e ti stra-ringrazio.
Sei stato 1 buon mentore. :)
Grazie di nuovo.

Matrixbob
02-11-2006, 20:44
il suo SO?!
la risoluzione?!

Questo è possibile carpirli ancora?!

0rph3n
03-11-2006, 08:29
il suo SO?!
navigator (http://www.w3schools.com/htmldom/dom_obj_navigator.asp)

la risoluzione?!
screen.width
screen.height


'iao

andbin
03-11-2006, 08:48
il suo SO?!Si può fare in diversi modi. Si esamina la stringa dello user-agent ed è possibile farlo sia lato server (es. con PHP) sia lato client (es. con Javascript).
Con PHP si esamina la variabile $_SERVER['HTTP_USER_AGENT'], con Javascript si esamina la proprietà navigator.userAgent.

Però non è proprio facile, browser diversi possono riportare (e se la riportano, perché potrebbero anche non farlo!) l'informazione su uno stesso S.O. in maniera differente.

Esempio con Firefox2:
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0

Con IE6:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

In questo caso, per entrambi è "Windows NT 5.0" (Windows 2000).


la risoluzione?!Si può ottenere solo con Javascript esaminando le proprietà dell'oggetto 'screen'

Prova questa pagina html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Prova</title>
</head>
<body>

<script type="text/javascript">
<!--
document.write ("User agent = " + navigator.userAgent + "<br>");
document.write ("Platform = " + navigator.platform + "<br>");
document.write ("Screen width = " + screen.width + "<br>");
document.write ("Screen height = " + screen.height + "<br>");
//-->
</script>

</body>
</html>
L'oggetto navigator ha anche altre proprietà, leggi <qui> (http://developer.mozilla.org/en/docs/DOM:window.navigator)

Se queste informazioni determinabili solo lato client servissero dal lato server, nulla viene di codificarle in qualche modo in un url per caricare una pagina o mettendole come campi nascosti in un form.