Newsgroup: it.comp.www.php
Titolo: Passaggio sicuro di parametri

Ciao
Io avrei bisogno di passare un parametro in modo sicuro, da una pagina html
ad una pagina php. Questo parametro potrebbe essere il nome utente per
accedere ad una database, oppure una password.
Se in un form utilizzo il metodo POST, anzichč il GET risolvo parzialmente
il problema, eliminando le variabili dalla barra degli indirizzi del
browser. Ma comunque attraverso il pacchetto queste informazioni vaiggiano
in chiaro, e se io usassi un software che mi fa lo scan del traffico...
sarei da capo.
C'č un modo per risolvere questo problema senza dover ricorrere ad una
sezione https?
Grazie
Vincenzo



Beh, se le pagine stessero sullo stesso sito, usa una pagina php
invece che una html e registra i dati da trasmettere in modo sicuro,
all'interno di variabili di sessione. In tal modo, dovrai passare il
solo session identifier.
hola
Buttha

 solo session identifier.
La cosa mi interessa...
Potresti fare un'esempio?
--
Reply to: brain79(at)
inwind.it
www.brainetwork.net
ICQ#: 42797710 - FeSToso n°143
[aforisma del giorno]
Quando si muore si ha ben altro da fare che di pensare alla morte. - Italo
Svevo

 Buttha
...Ma cmq almeno all'inizio dovrai ottenerle dall'utente delle vriabili no?

se questi valori li deve immettere l'utente nel form, secondo me c'è solo
ssl... anche se trovassi il modo di far criptare i dati a uno script java si
può sempre andare a leggere il sorgente del codice, e siamo punto a capo..
non so se può essere utile, ma ho letto ultimamente che ci sono delle applet
che criptano il codice html direttamente al browser, in modo che aprendo il
sorgente html non si riesce a leggere niente (o almeno a capirci :) ).

...Ma cmq almeno all'inizio dovrai ottenerle dall'utente delle vriabili no?
Beh, certo: in questo caso non si scappa da SSL.
hola
Buttha

Potresti fare un'esempio?
Dipende da cosa vuole fare chi ha dato origine al thread: mi
piacerebbe conosce meglio il caso specifico, per capire se questo
approccio e' utilizzabile.
BTW, il concetto è semplice: utilizzando le sessioni, le variabili
registrate stanno sul server stesso e, quindi, non devono essere
trasmesse. L'unica cosa trasmessa è l'identificativo di sessione che
indica al server dove stanno i dati relativi alla sessione.
L'ulteriore grosso vantaggio di utilizzare variabili di sessione per
dati "sensibili" è il fatto che le variabili possono venire manipolate
*esclusivamente* dagli script php: non si puo' dare dei valori a tali
variabili in tal modo.
Se, per esempio, pagina.php ha registrato la variabile $pippo e io
chiamo 
http://sito/pagina.php?pippo=valore
, tale assegnamento *non*
verrà eseguito.
Un esempio di login può essere il seguente (l'aspetto grafico fa pena,
perchè l'esempio l'ho *ritagliato* da una pagina reale):
*******pagina di login******************
*******index.php************************
*******************************************
<?
session_start();
$sid=SID;
session_register("idutente","nomeutente");
if ($formusername) $username=$formusername;
if ($formpassword) $password=$formpassword;
include($DOCUMENT_ROOT . "collegamento.php");
$result=mysql_query("SELECT * FROM utenti WHERE username='$username'
AND password='$password'",$link) or die("Invalid query");
$result=mysql_fetch_object($result);
$username=$result->username;
$password=$result->password;
$idutente=$result->idutente;
$nomeutente=$result->nome;
if ($idutente) header("Location: ok.php?$sid");
?>
<html>
<head>
<title>Titolo</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body bgcolor="#000000" text="#FFFFFF">
<? if (!$idutente): ?>
<form action="<? echo "$PHP_SELF?$sid"; ?>" method="POST">
Utente: <input type="text" name="formusername">
Password: <input type="password" name="formpassword">
<?
if ($login) echo "<font color=\"#FF0000\"><b>Dati errati</b></font>";
?> 
<input type="submit" name="login" value="Vai">
</form>
</body>
</html>
<?
exit;
endif;
?>
</body>
</html>
*******************fine pagina*************************
se il login va a buon fine, finiremo nella pagina ok.php
Iniziando tale pagina con:
<?
session_start();
if(!$idutente):
exit;
endif;
?>
recupereremo le variabili $idutente e $nomeutente e, come vedi in
index.php, tali dati non li abbiamo esplicitamente passati.
In generale, andando a pagina.php?<? echo $sid; ?>, e iniziando
pagina.php con session_start(), passeremo i valori di $idutente e
$nomeutente senza farli comparire nel sorgente html della pagina
richiamante.
Inoltre, una chiamata da browser di questo tipo:
http://indirizzo/ok.php?idutente=2
non sortirebbe alcun effetto, appunto perchè non è possibile assegnare
esplicitamente valori a variabili registrate, se non dagli stessi
script.
IMPORTANTE: all'inizio di ogni pagina seguente al login, il test su
$idutente bisogna sempre farlo, per controllare se l'utente ha fatto
login.
hola
Buttha

 ha scritto nel messaggio
news:3c565d4c...@news.seta.it...


 Buttha
...intanto vado a fare un po' di esperimenti...
bye Brain


...intanto vado a fare un po' di esperimenti...
Che e' la cosa migliore.
hola
Buttha

come vedi, poi c'e' la query che verifica il dato.
Ho trovato una falla: non nella pagina di login, ma nelle altre
pagine:
avevo scritto che, iniziando un'altra pagina cosě:
<?
session_start();
if(!$idutente):
exit;
endif;
?>
si verificava che l'utente avesse fatto login.
Ma questo č un buco bello e buono:
se evito la pagina di login e ne richiamo un'altra cosi':
http://indirizzo/ok.php?idutente=2
il primo session_start() fa partire una nuova sessione (dato che non
ho nessun sid) e, in tale nuova sessione, $idutente *non e'* una
variabile di sessione.
Quindi entro senza il bisogno di autenticarmi.
Neanche:
<?
session_start();
session_register("idutente");
if(!$idutente):
exit;
endif;
?>
risolve il problema.
Visto: parlandone, ne ho tirato fuori qualcosa anch'io.
Ora devo risolvere il problema.
Buttha

Provato così?
 <?
 session_start();
 session_register("idutente");
 if(! $HTTP_SESSION_VARS["idutente"]):
 exit;
 endif;
 ?>
--
Reply to: brain79(at)
inwind.it
www.brainetwork.net
ICQ#: 42797710 - FeSToso n°143
[aforisma del giorno]
Nei casi dubbi si decida per il giusto. - Karl Kraus

  ?>
Comunque nel programma che mi ero fatto io, salvavo la password nelle
variabili di sessione e la ricontrollavo ad ogni accesso di ogni pagina....
è sbagliato?


 ?>
Cosě e' perfetto! [*]
hola
Buttha
[*] fino a prova contraria :)

è sbagliato?
No, non è sbagliato: io tendevo ad usare le variabili di sessione per
evitare un accesso al db.
hola
Buttha

 >  ?>
Un'altro controllo per la sicurezza può essere salvare l'IP tra le variabili
di sessione e verificare che nella pagina chiamata l'IP sia ancora uguale?
Ci sono controindicazioni?
...ho fatto qualche prova e non mi pare[*]


Ci sono controindicazioni?
Per ora, non me ne viene in mente nessuna.
Buttha

Anche se il thread è chiuso, per quanto riguarda la programmazione
sicura, segnalo a tutti questo articolo apparso su Zend:
Secure Programming in PHP: 
http://www.zend.com/zend/art/art-oertli.php
Ciao
Matteo