Discussione:
Criptare un form
(troppo vecchio per rispondere)
unknown
2006-11-02 14:26:13 UTC
Permalink
Ciao a tutti,

ho creato un form in php per il mio sito internet.
Nello script del form ci sono alcuni dati che vorrei criptare.
Per esempio, mi piacerebbe criptare l'e-mail del destinatario contenuta
nello script, per evitare che sia usata per spamming.
Sapete se esistono script/software open source utili per questo scopo?

Grazie mille.
Nick
ValeRyo Saeba
2006-11-02 14:41:38 UTC
Permalink
Post by unknown
ho creato un form in php per il mio sito internet.
Nello script del form ci sono alcuni dati che vorrei criptare.
Per esempio, mi piacerebbe criptare l'e-mail del destinatario
contenuta nello script, per evitare che sia usata per spamming.
Sapete se esistono script/software open source utili per questo scopo?
Qual'è lo scopo? Criptarla per non farla vedere a chi?
--
ValeRyo
unknown
2006-11-02 16:35:50 UTC
Permalink
Post by ValeRyo Saeba
Post by unknown
ho creato un form in php per il mio sito internet.
Nello script del form ci sono alcuni dati che vorrei criptare.
Per esempio, mi piacerebbe criptare l'e-mail del destinatario
contenuta nello script, per evitare che sia usata per spamming.
Sapete se esistono script/software open source utili per questo scopo?
Qual'è lo scopo? Criptarla per non farla vedere a chi?
Lo scopo è impedire che programmi di spamming utilizzino l'indirizzo
e-mail contenuto nel form per inviare messaggi di spamming.
Alessandro Pellizzari
2006-11-02 16:45:07 UTC
Permalink
Post by unknown
Lo scopo è impedire che programmi di spamming utilizzino l'indirizzo
e-mail contenuto nel form per inviare messaggi di spamming.
Tutto quello che va e viene dal browser e` insicuro.

Salva l'email del destinatario sul server e processa li` il tuo form.

Bye.
ValeRyo Saeba
2006-11-02 16:55:15 UTC
Permalink
Post by unknown
Lo scopo è impedire che programmi di spamming utilizzino l'indirizzo
e-mail contenuto nel form per inviare messaggi di spamming.
L'indirizzo email NON DEVE stare nel form html, altrimenti il form
lo usano per fare di meglio che inviare spam a te...
Mettilo hardcoded nello script e vai sicuro.
--
ValeRyo
rob4you
2006-11-03 10:12:18 UTC
Permalink
Post by ValeRyo Saeba
L'indirizzo email NON DEVE stare nel form html, altrimenti il form
lo usano per fare di meglio che inviare spam a te...
Mettilo hardcoded nello script e vai sicuro.
Forse non ho ben capito io quello che vuole fare Nick, ma immaginando ad
esempio la procedura di registrazione a un sito, l'utente DEVE :-) inserire
il proprio indirizzo email (in un form, e dove se no? :-) ). Forse lui
vorrebbe criptare proprio questo campo, senza ricorrere a trasferimento via
https.
La cosa che mi viene in mente, almeno in linea teorica, è l'uso di una
chiave pubblica per criptare sul client (con javascript) e di una privata
per decriptare sul server (con php) il dato ricevuto via POST. Sempre che in
javascript esistano valide funzioni di cifratura (altrimenti bisognerebbe
farsele in casa).
Ad esempio ho trovato qualcosa via javascript solo (non so dirne la validità
però):
http://www.psi.toronto.edu/~vincent/blog/jscrypt.html
http://www.fourmilab.ch/javascrypt/javascrypt.html
http://www.fourmilab.ch/javascrypt/

rob4you
www.outofmind.eu
rob4you
2006-11-03 10:52:18 UTC
Permalink
Post by rob4you
Ad esempio ho trovato qualcosa via javascript solo (non so dirne la
http://www.psi.toronto.edu/~vincent/blog/jscrypt.html
http://www.fourmilab.ch/javascrypt/javascrypt.html
http://www.fourmilab.ch/javascrypt/
Un altro link che permette anche la cifratura asimmetrica
http://home.versatel.nl/MAvanEverdingen/Code/

(tutti sempre da provare of coure) :-)
Post by rob4you
rob4you
www.outofmind.eu
rob4you
2006-11-03 11:04:40 UTC
Permalink
Post by rob4you
Post by rob4you
Ad esempio ho trovato qualcosa via javascript solo (non so dirne la
http://www.psi.toronto.edu/~vincent/blog/jscrypt.html
http://www.fourmilab.ch/javascrypt/javascrypt.html
http://www.fourmilab.ch/javascrypt/
Un altro link che permette anche la cifratura asimmetrica
http://home.versatel.nl/MAvanEverdingen/Code/
E more:
http://mysite.mweb.co.za/residents/c.meijer/meringue.htm
Post by rob4you
(tutti sempre da provare of coure) :-)
Post by rob4you
rob4you
www.outofmind.eu
rob4you
2006-11-03 11:09:22 UTC
Permalink
Post by rob4you
Post by rob4you
Post by rob4you
Ad esempio ho trovato qualcosa via javascript solo (non so dirne la
http://www.psi.toronto.edu/~vincent/blog/jscrypt.html
http://www.fourmilab.ch/javascrypt/javascrypt.html
http://www.fourmilab.ch/javascrypt/
Un altro link che permette anche la cifratura asimmetrica
http://home.versatel.nl/MAvanEverdingen/Code/
http://mysite.mweb.co.za/residents/c.meijer/meringue.htm
In Js lato client:
http://www.ohdave.com/rsa/
Post by rob4you
Post by rob4you
(tutti sempre da provare of coure) :-)
Post by rob4you
rob4you
www.outofmind.eu
unknown
2006-11-03 13:26:29 UTC
Permalink
grazie mille!
hai perfettamente centrato il punto.
nick
Post by rob4you
Post by rob4you
Post by rob4you
Post by rob4you
Ad esempio ho trovato qualcosa via javascript solo (non so dirne la
http://www.psi.toronto.edu/~vincent/blog/jscrypt.html
http://www.fourmilab.ch/javascrypt/javascrypt.html
http://www.fourmilab.ch/javascrypt/
Un altro link che permette anche la cifratura asimmetrica
http://home.versatel.nl/MAvanEverdingen/Code/
http://mysite.mweb.co.za/residents/c.meijer/meringue.htm
http://www.ohdave.com/rsa/
Post by rob4you
Post by rob4you
(tutti sempre da provare of coure) :-)
Post by rob4you
rob4you
www.outofmind.eu
Francesco F
2006-11-03 18:04:03 UTC
Permalink
Post by unknown
grazie mille!
hai perfettamente centrato il punto.
nick
Ma vale la pena implementare una cifratura client side? Se l'utente ha
il js disabilitato oppure lo script ha problemi con alcuni browser? Opta
per l'https

Francesco
ValeRyo Saeba
2006-11-03 17:56:03 UTC
Permalink
Post by rob4you
Forse non ho ben capito io quello che vuole fare Nick
No, forse non l'ho capito io :-)
A me pareva che lui dovesse inviare email all'indirizzo passato
via POST o GET su un form.
Post by rob4you
, ma immaginando
ad esempio la procedura di registrazione a un sito, l'utente DEVE :-)
inserire il proprio indirizzo email (in un form, e dove se no? :-) ).
Forse lui vorrebbe criptare proprio questo campo, senza ricorrere a
trasferimento via https.
E a che pro?
Post by rob4you
La cosa che mi viene in mente, almeno in linea teorica, è l'uso di una
chiave pubblica per criptare sul client (con javascript) e di una
privata per decriptare sul server (con php) il dato ricevuto via
POST.
Ma per far cosa? Per evitare lo sniffing? Mi pare strano che ci
siano spammer a sniffare i moduli di registrazione, recuperano
tante email in altri modi :-)
--
ValeRyo
rob4you
2006-11-03 18:42:22 UTC
Permalink
Post by ValeRyo Saeba
Post by rob4you
Forse lui vorrebbe criptare proprio questo campo, senza ricorrere a
trasferimento via https.
E a che pro?
bohhh? :-) forse non ha ha disposizione l'uso di un ssl.
Post by ValeRyo Saeba
Post by rob4you
La cosa che mi viene in mente, almeno in linea teorica, è l'uso di una
chiave pubblica per criptare sul client (con javascript) e di una
privata per decriptare sul server (con php) il dato ricevuto via
POST.
Ma per far cosa? Per evitare lo sniffing? Mi pare strano che ci
siano spammer a sniffare i moduli di registrazione, recuperano
tante email in altri modi :-)
In effetti hai perfettamente ragione....ma macinando la mente, ho cercato di
interpretare l'idea di Nick:
fai caso che non sia un problema di registrazione, ma solo di login.
Occorreranno username e password; se come username il sito impone l'uso
della propria email (come molti fanno), forse Nick voleva proprio criptare
questa email (e ovviamente anche la password), senza ricorrere a https
(magari perché non può), magari non necessariamente a scopo di protezione da
spammers.
Già che ci sono, viene a me un dubbio: ma ricorrendo a xmlhttprequest è
possibile usare https? Se no, questo ad esempio potrebbe essere il caso in
cui potrebbe servire una cifratura lato client con chiave pubblica.
Immagina che voglio loggarmi a un sito, e voglio che la procedura di login
sia fatta attraverso ajax (in modo che non salto da una pagina all'altra),
di conseguenza: o uso un trasferimento dati sicuro, oppure devo cifrare i
dati prima di inviarli. Che tu sappia, si può quindi usare https con
xmlhttprequest? Volevo tempo fa aprire un 3d apposta...vediamo un po. :-)
Post by ValeRyo Saeba
ValeRyo
rob4you
www.outofmind.eu
ValeRyo Saeba
2006-11-03 20:03:42 UTC
Permalink
Post by rob4you
forse Nick voleva
proprio criptare questa email (e ovviamente anche la password), senza
ricorrere a https (magari perché non può), magari non necessariamente
a scopo di protezione da spammers.
No no, ha detto proprio che vuole
Post by rob4you
criptare l'e-mail del destinatario contenuta
nello script, per evitare che sia usata per spamming.
e sinceramente di un altro script bucabile in giro per la rete non ne
sento il bisogno :-D
Post by rob4you
Già che ci sono, viene a me un dubbio: ma ricorrendo a xmlhttprequest
è possibile usare https?
Mi pare di si, se sei sempre nello stesso dominio.
--
ValeRyo
i***@ianaz.ch
2006-11-13 12:53:32 UTC
Permalink
Salve, io ho invece bisogno di criptare la password prima di inviarla
al server, solamente che i metodi da voi citati permettono anche la
decriptazione...
Ne conoscete alcuni che non permettono questo?
Leonardo Serni
2006-11-13 14:00:53 UTC
Permalink
Post by i***@ianaz.ch
Salve, io ho invece bisogno di criptare la password prima di inviarla
al server, solamente che i metodi da voi citati permettono anche la
decriptazione...
Ne conoscete alcuni che non permettono questo?
MD5 e SHA in Javascript. Trovi gli script in rete.

Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?
rob4you
2006-11-13 18:09:38 UTC
Permalink
Post by i***@ianaz.ch
Salve, io ho invece bisogno di criptare la password prima di inviarla
al server, solamente che i metodi da voi citati permettono anche la
decriptazione...
In che senso? Cerchi una funzione one-way? Guarda che alcuni metodi che sono
stati suggeriti OVVIAMENTE non prevedono lo stesso algoritmo di decifratura
utilizzato per la cifratura.....altrimenti a che serve!! :-)
Erano stati apposta indicati ad esempio algoritmi a chiave pubblica.
Se poi non interessa affato recuperare la password in chiaro, in nessuna
situazione, allora Leonardo ti ha indicato due algoritmi possibili, da
utilizzare via javascript.
Ma come è stato fatto notare...in realtà non serve quasi a nulla....e sai
perché? Perché se tu vuoi proteggere password da sniffing in questo modo,
poiché tu la protezione la fai via javascript, a un malintenzionato basta
inviare la password già cifrata, col nome utente, da un form fittizio.
Ovviamente il server non può sapere se la password ricevuta è stata criptata
da js o meno, e quindi il malintenzionato accede al sito con le stesse
credenziali dell'utente con password cifrata.

Infine bada che TUTTI i metodi permettono una decriptazione........magari
nessuno spenderà risorse e tempo per decriptare la password cifrata con
algortimo one-way, utile soltanto al "mio" sito amatoriale! ;-) Fosse il
sito amatoriale di Bush ancora ancora ci si potrebbe pensare....non so se mi
spiego....si dice: la spesa non vale l'impresa. :-)

ciao,
rob4you
www.outofmind.eu
Leonardo Serni
2006-11-13 18:19:50 UTC
Permalink
Post by rob4you
In che senso? Cerchi una funzione one-way? Guarda che alcuni metodi che sono
stati suggeriti OVVIAMENTE non prevedono lo stesso algoritmo di decifratura
utilizzato per la cifratura.....altrimenti a che serve!! :-)
Erano stati apposta indicati ad esempio algoritmi a chiave pubblica.
Se poi non interessa affato recuperare la password in chiaro, in nessuna
situazione, allora Leonardo ti ha indicato due algoritmi possibili, da
utilizzare via javascript.
Ma come è stato fatto notare...in realtà non serve quasi a nulla....e sai
perché? Perché se tu vuoi proteggere password da sniffing in questo modo,
poiché tu la protezione la fai via javascript, a un malintenzionato basta
inviare la password già cifrata, col nome utente, da un form fittizio.
Ovviamente il server non può sapere se la password ricevuta è stata criptata
da js o meno, e quindi il malintenzionato accede al sito con le stesse
credenziali dell'utente con password cifrata.
In teoria, tu puoi tenere sul server la password criptata con MD5. Quando
vuoi validare un utente, gli mandi una challenge (es. "obluraschi?").

L'utente inserisce la password in javascript e genera l'MD5 della "somma"
fra l'MD5 della password e quello del challenge: MD5(CONCAT(ch), MD5(pw))
e invia questo al server.

Il server non conosce la password - ma conosce la challenge e l'MD5 della
password; gli basta, per capire se l'utente conosce l'MD5 della password,
il che vuol dire che conosce la pw... anche se questa non e' sul server e
non passa mai sulla rete, ne' in chiaro ne' criptata (ci passa hashata al
quadrato :-) ).

Certo, se entri in possesso del database DEL SERVER, dopo puoi entrare. E
pero' a quel punto probabilmente non ti serve piu' :-)

Ma sniffando MD5(CONCAT(challenge),MD5(password)), ci puoi fare il brodo,
dato che la challenge sara' di tipo unique e non sara' piu' usata.

Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?
rob4you
2006-11-17 15:10:25 UTC
Permalink
Post by Leonardo Serni
Ma sniffando MD5(CONCAT(challenge),MD5(password)), ci puoi fare il brodo,
dato che la challenge sara' di tipo unique e non sara' piu' usata.
E la challenge come me la conservo sul server ogni volta per fare il
matching con ciò che è inviato dal client? In sessione?

rob4you
Leonardo Serni
2006-11-17 17:46:36 UTC
Permalink
Post by rob4you
Post by Leonardo Serni
Ma sniffando MD5(CONCAT(challenge),MD5(password)), ci puoi fare il brodo,
dato che la challenge sara' di tipo unique e non sara' piu' usata.
E la challenge come me la conservo sul server ogni volta per fare il
matching con ciò che è inviato dal client? In sessione?
O la tieni in sessione, oppure la generi ogni volta diversa. Per esempio
puoi usare come challenge un altro MD5: secret piu' data(YmdHi). Data la
possibilita' che "scatti" il minuto, farai due o tre giri, partendo da 3
minuti prima:

$md5pass = SQLFetchValue("SELECT md5pass FROM users WHERE
user='$escape_user';");
$ok = false;
$serial = (int)(time() / 60) - 3;
for ($n = 0; $n < 4; $n++)
{
$challenge = MD5("$secret:" . ($serial + $n));
if ($_REQUEST['response'] == md5("$challenge:$md5pass"))
{
$ok = true;
break;
}
}

Un attaccante non puo' prevedere a priori la stringa $challenge dato che
non conosce $secret, e non gli serve a molto intercettarla, perche' dopo
cinque minuti non sara' piu' riconosciuta come valida. Fermo restando il
fatto che potrei usare $secret:$_SERVER[REMOTE_ADDR]:$serial, in modo da
legare il challenge anche all'indirizzo IP della controparte. Cosi', uno
che volesse forgiare una credenziale dovrebbe non solo intercettarmi una
connessione, ma riuscire ad effettuare un attacco man-in-the-middle (del
tipo: intercetta la connessione a livello di ADSL, e al momento buono mi
butta fuori.

Il trucco con la password in chiaro potrebbe fartelo il netadmin che per
esempio vuole farti un scherzo (!); per forgiare un'autenticazione cosi'
pero' bisogna che abbia predisposto tutto in anticipo... non e' qualcosa
come lanciare un felino 'ngrep "GET.*Authorization: Basic" port 80...'.

Se c'e' questo rischio, credo che SSL sia l'unica alternativa (oppure si
puo' provare con l'autenticazione Digest).

Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?
Leonardo Serni
2006-11-17 17:58:24 UTC
Permalink
Post by Leonardo Serni
O la tieni in sessione, oppure la generi ogni volta diversa.
Se mai fanno un campionato per una frase che non vuol dire un cazzo,
con questa entry non c'e' storia :-(

Volevo dire (suppongo) che, o la tieni in sessione, oppure la generi
in modo deterministico. E' chiaro che se non la generassi ogni volta
diversa, tanto varrebbe usare una challenge vuota.

Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?
rob4you
2006-11-17 19:14:44 UTC
Permalink
Post by Leonardo Serni
secret piu' data(YmdHi).
Ma $secret la decido una volta per tutte in modo unico per tutti? Ti
chiedo questo perché nel codice non ho trovato nessuna assegnazione a
$secret.
Post by Leonardo Serni
Data la
possibilita' che "scatti" il minuto, farai due o tre giri, partendo da 3
Di conseguenza se ci metto più di tre minuti a completare il form, non
riuscirei a completarlo, giusto?
Post by Leonardo Serni
Un attaccante non puo' prevedere a priori la stringa $challenge dato che
non conosce $secret, e non gli serve a molto intercettarla, perche' dopo
cinque minuti non sara' piu' riconosciuta come valida.
Questo aspetto è legato al fatto che, in questo caso, genero il
challenge in modo deterministico legandolo al tempo? Se invece lo
generassi in modo casuale, il fatto di memorizzarlo in sessione fino al
check, e poi eliminarlo, risolverebbe il "problema" (sempre che di
problema si tratti) del tempo?
Post by Leonardo Serni
Fermo restando il
fatto che potrei usare $secret:$_SERVER[REMOTE_ADDR]:$serial,
Questa idea mi piace abbastanza.
Devo provare il tutto per vederlo bene in pratica.

rob4you
Leonardo Serni
2006-11-17 21:29:41 UTC
Permalink
Post by rob4you
Ma $secret la decido una volta per tutte in modo unico per tutti? Ti
chiedo questo perché nel codice non ho trovato nessuna assegnazione a
$secret.
$secret si', e' unico e costante, configurato server side.
Post by rob4you
Post by Leonardo Serni
Data la
possibilita' che "scatti" il minuto, farai due o tre giri, partendo da 3
Di conseguenza se ci metto più di tre minuti a completare il form, non
riuscirei a completarlo, giusto?
Tre minuti e' parecchio tempo. Comunque, nessuno ti vieta di aumentare il
tempo di validita'.
Post by rob4you
Questo aspetto è legato al fatto che, in questo caso, genero il
challenge in modo deterministico legandolo al tempo? Se invece lo
generassi in modo casuale, il fatto di memorizzarlo in sessione fino al
check, e poi eliminarlo, risolverebbe il "problema" (sempre che di
problema si tratti) del tempo?
Si'. E puoi fare entrambe le cose: lo generi su base casuale o temporale,
e poi lo salvi in sessione. Il dato esiste solo server side. A quel punto
per la possibilita' che sia intercettato e simulato il cookie di sessione
puoi salvare l'IP del client; a meno che uno usi uno di quegli anonymizer
che mandano ogni richiesta tramite un proxy diverso, il controllo mi pare
piuttosto completo.

Certo: uno determinato riesce lo stesso a fare qualcosa, ma questo ti sta
ad insegnare che non devi rompere i coglioni all'FBI o alla Mafia :-)

Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?
rob4you
2006-11-17 23:58:05 UTC
Permalink
Post by Leonardo Serni
Certo: uno determinato riesce lo stesso a fare qualcosa, ma questo ti sta
ad insegnare che non devi rompere i coglioni all'FBI o alla Mafia :-)
Direi che questo è il sunto perfetto di tutta la conversazione! :-)

grazie per tutti i preziosi consigli....nel caso torno a romperti un
po' più in là. ^__^

rob4you

Loading...