Newsgroup: it.comp.www.php
Titolo: Impostare un nome sicuro per la sessione

Ciao a tutti,
quando pubblico una mia applicazione vorrei evitare che altre
applicazioni ospitate sullo stesso dominio "pestino i piedi" (in buona
o in mala fede) alle mie variabili di sessione; questo puo' succedere
se due applicazioni utilizzano lo stesso nome di variabile.
Potrei utilizzare session_name, ma sarebbe sufficiente analizzare il
codice per scoprire qual e' il nome della sessione che utilizzo...non
c'e' modo di creare un nome random e univoco per la sessione?
Ovviamente non posso fare una cosa di questo tipo:
session_name ('mia_var_'.mt_rand(1, 1000000));
perche' session_name va richiamato sempre prima di session_start e
quindi cambierei il nome della sessione ad ogni cambio pagina.
Idee?
Grazie!
E.

 c'e' modo di creare un nome random e univoco per la sessione?
La cosa migliore che puoi fare e` di mettere le sessioni in una directory 
del sito (dentro o fuori dai file pubblici), o, se usi suphp, nella home 
dell'utente.
Bye.

 circa. La sfiga ci vede benissimo, ma deve anche sapere dove colpire! :)
Ciao,
non parlo del nome del file che contiene i dati di sessione, ma di
session.name
, che di default e' PHPSESSID.
Eugenio.

 
session.name
, che di default e' PHPSESSID.
OK, ma perche`? :)
In ogni caso la sessione e` legata al dominio.
Al massimo definisci un nome per ogni applicazione, e lo imposti con 
session_name(), ma onestamente non capisco dove stia il problema.
Hai diverse applicazioni nello stesso dominio?
Bye.


Si', e' quello che ho scritto nella prima mail, "altre applicazioni
ospitate sullo stesso dominio" :-)
E.

 ospitate sullo stesso dominio" :-)
Potresti provare se session_set_cookie_params fa al caso tuo.
Affinché non siano sovrapposte le variabili, specifichi il path di ogni 
applicazione.
-- 
rob4you


Io posso al massimo impostare il path della mia, ma se le altre
eventuali applicazioni (di cui non ho il controllo, altrimenti non
nascerebbe il problema) non lo impostano possono sempre accedere alle
var di sessione della mia.
Eugenio.

 var di sessione della mia.
Allora e` un problema del sistemista.
Deve assegnare a ognuno dei progetti un nome di sessione, e loro devono 
usarlo, altrimenti non sarai mai al sicuro dai conflitti.
L'alternativa e` di mettere le varie applicazioni in domini diversi.
Bye.


Beh il discorso e' che io vorrei distribuire un'applicazione e vorrei
essere sicuro che altre applicazioni installate non interferiscano con
la mia, quindi il problema purtroppo e' mio e non del
sistemista :)...mi confermate quindi che in PHP non c'e' modo di
tutelarsi in questo senso?
Avevo anche pensato a una cosa di questo tipo: generare allo start-up
della sessione un valore casuale univoco, che memorizzo in una
variabile, es. $key...e poi nel codice utilizzarlo come prefisso dei
nomi delle var di sessione...es. non piu' $_SESSION['pippo'] ma
$_SESSION[$key.'pippo']....per il codice scritto da me basterebbe un
trova e sostituisci globale ma se devo includere eventuali librerie
GPL scritte da altri preferirei non mettere le mani al codice...
Ciao.
E.

 scritte da altri preferirei non mettere le mani al codice...
Lo Zend Framework implementa una sorta di "namespace" delle sessioni.
In pratica la tua applicazione crea una sola variabile di sessione, che in 
realta` e` un array, al cui interno metti tutti i valori che vuoi:
$_SESSION["miaapplicazione"]["variabile"] = "pippo";
print $_SESSION["miaapplicazione"]["variabile"];
(Naturalmente ZF wrappa tutto questo in una classe, senza dover scrivere 
ogni volta tutta la pappardella.)
Bye.

 ogni volta tutta la pappardella.)
Interessante, in pratica e' quello che avevo pensato di fare pero'
implementato in modo piu' elegante...rimane il problema di cui sopra,
tutte le eventuali librerie o altro incluse dovrebbero anch'esse
utilizzare lo zend framework.
E.

 utilizzare lo zend framework.
Non e` detto, e non e` nemmeno necessario che usino tutto il framework.
Puoi replicarti le funzionalita` della classe:
class Sessione()
{
 private $namespace;
 public function __construct($namespace="global")
 {
  session_start();
  $this->namespace = $namespace;
  $_SESSION[$this->namespace] = array();
 }
 public function __set($var, $val)
 {
  $_SESSION[$this->namespace][$var] = $val;
 }
 public function __get($var)
 {
  return $_SESSION[$this->namespace][$var];
 }
}
Naturalmente va completata coi controlli di rito, era per chiarire il 
concetto. Serve PHP5, altrimenti non hai __get e __set.
Poi la usi cosi`:
$ms = new Sessione("miaapplicazione");
$ms->pippo = "pluto";
print $ms->pippo;
Bye.

 Puoi replicarti le funzionalita` della classe:
[...]
Ma se, facciamo un esempio, ADODB, che utilizzo nella mia
applicazione, continua ad accedere alle sessioni nel modo classico
com'e' possibile che il problema sicurezza venga risolto?
E.

Hola Alessandro... scusa se mi intrometto in modo assolutamente
OT alla discussione... ma la mail che usi qui nel ng è funzionante?
Ho tentato di contattarti in privato ma senza esito (sempre che tu
non mi abbia bellamente cestinato, ovviamente... :D ).
-- 
Aloha, (m|t)
---------------------------------------------------------------------
Comunicazione per la pubblica amministrazione, grandi aziende, pmi
Bazzmann|Mag > 
http://www.bazzmann.com
Bazzmann Srl > 
http://www.bazzmann.it
---------------------------------------------------------------------

 mi abbia bellamente cestinato, ovviamente... :D ).
L'ho vista, ma dovevo pensarci con calma, quindi aspettavo di avere 
mezz'oretta di calma :)
Entro sera cerco di risponderti.
Bye.

 mezz'oretta di calma :)
Ah, ok... tranquillo tranquillo... mi era venuto il dubbio... :)
