Pregunta con $_SESSION php

Iniciado por xalupeao, 14 Agosto 2009, 11:34 AM

0 Miembros y 1 Visitante están viendo este tema.

xalupeao

Bueno amigos lo que pasa es que estoy programando un panel de control y estoy tomando todos los cuidados posibles es por ello que quiero hacer la siguiente pregunta.

¿Es posible modificar el valor de las $_SESSION?

porque lo pregunto porque si yo en panel guardo el nivel del usuario

1 = admin
2 = moderador
3 = cliente

$_SESSION['nivel'] = 1;

..... alguien podria modificar su nivel y paff me caga XD



Silverhost Hosting Chile - La empresa lider de Hosting en Chile .

miguel86

Nop, las sesiones no son como las cookies que las guarda el cliente, los datos de las sesiones las mantiene el servidor y son inaccesibles al cliente (son ficheros guardados en el disco en el servidor en los directorios indicados en PHP.INI). PHP utiliza dos métodos para saber cual es la sesión activa, con una cookie con identificador único de sesión o a través de un parámetro SID (así conoce la sesión activa pero los valores de las variables de la sesión las guarda el servidor).
Por eso usar Sesiones es más seguro que usar cookies.
Salu2

Darioxhcx


SnakeDrak

Hola,

Como dice miguel86, las sesiones se guardan en el servidor, lo que guarda el cliente es un ID que identifica a la sesión.

Lo que quieres hacer es simple, creas una clase para los usuarios, aquí te dejo un ejemplo:

Código (php) [Seleccionar]

/*****************************************
* Funciones para las cuentas
****************************************/
class ACC {
public $id; // Account ID
public $auser; // User ID
public $pass; // Pass cifrada
public $level; // Nivel
/******************************************************
* Inicializar la sesión de la cuenta
* $_SESSION['us'] = new ACC(<columnas del select>);
*****************************************************/
public function ACC($a) {
global $cnf;
list($this->id, $this->auser, $this->pass, $this->level) = $a;
$this->pass = md5(sha1($this->pass)); // ciframos la pass
$this->level = (isset($cnf['lvl'][$this->level]))?$cnf['lvl'][$this->level]:$cnf['lvl']['Defecto'];
return;
}
}


Luego $cnf es el archivo de configuración, haces algo así:

Código (php) [Seleccionar]


$leer = 1;
$editar = 2;
$crear = 4;
$banear = 8;

$cnf = array ( 'lvl' => array ( "Admin" => $leer | $editar | $crear | $banear, // Todos los permisos
                                 "Defecto" => $leer )); // Defecto será cuando el nivel seleccionado en la DB no exista


Entonces cuando inicie sesión pones:

Código (php) [Seleccionar]

$_SESSION['us'] = new ACC($rs->fetch_row); // Les pasas los datos seleccionados


Pongamos que quieres comprobar los permisos de creación:

Código (php) [Seleccionar]

if(isset($_SESSION['us'])){ // Si no está logeado
header("Location: /");
exit;
}

if($_SESSION['us']->level & 4)
echo "Tiene permisos para crear";
else echo "No tiene permisos para crear";


Ojalá te sea de ayuda.
Saludos!

WHK

lo que realmente es phpsessid es un archivo guardado por su nombre de hash en el directorio temporal asignado al php, estos archivos contienen la información de sesiones en forma de array serializado (notese que no va cifrado) y lo único que tiene el visitante en su explorador es el id de la sesión que en este caso es el nombre del archivo y php maneja el contenido de ese archivo pero en ningún momento como dicen el visitante tiene acceso a esos datos pero si logras entrar en el setvidor y vas al directorio temporal que por lo general tiene permisos de escritura y lectura podrás buscar la sesión que quieres ver o modificar... tomas su string y lo desserializas con <?php unserialize(string); ?>

xalupeao

Se pasaron  :D realemnte tenia esa duda porque no quiero que mi sistema sea facil de vulnerar!

Gracias.
Silverhost Hosting Chile - La empresa lider de Hosting en Chile .