Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: xalupeao en 14 Agosto 2009, 11:34 am



Título: Pregunta con $_SESSION php
Publicado por: xalupeao en 14 Agosto 2009, 11:34 am
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





Título: Re: Pregunta con $_SESSION php
Publicado por: miguel86 en 14 Agosto 2009, 13:28 pm
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


Título: Re: Pregunta con $_SESSION php
Publicado por: Darioxhcx en 14 Agosto 2009, 13:35 pm
esto va en desaroolo web... hace poco preguntaron algo parecido

http://foro.elhacker.net/php/sistema_de_permisos_con_php-t263754.0.html

suerte
saludos


Título: Re: Pregunta con $_SESSION php
Publicado por: SnakeDrak en 14 Agosto 2009, 18:07 pm
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
  1. /*****************************************
  2.  * Funciones para las cuentas
  3.  ****************************************/
  4. class ACC {
  5. public $id; // Account ID
  6. public $auser; // User ID
  7. public $pass; // Pass cifrada
  8. public $level; // Nivel
  9. /******************************************************
  10. * Inicializar la sesión de la cuenta
  11. * $_SESSION['us'] = new ACC(<columnas del select>);
  12. *****************************************************/
  13. public function ACC($a) {
  14. global $cnf;
  15. list($this->id, $this->auser, $this->pass, $this->level) = $a;
  16. $this->pass = md5(sha1($this->pass)); // ciframos la pass
  17. $this->level = (isset($cnf['lvl'][$this->level]))?$cnf['lvl'][$this->level]:$cnf['lvl']['Defecto'];
  18. return;
  19. }
  20. }
  21.  

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

Código
  1.  
  2. $leer = 1;
  3. $editar = 2;
  4. $crear = 4;
  5. $banear = 8;
  6.  
  7. $cnf = array ( 'lvl' => array ( "Admin" => $leer | $editar | $crear | $banear, // Todos los permisos
  8.                                  "Defecto" => $leer )); // Defecto será cuando el nivel seleccionado en la DB no exista
  9.  

Entonces cuando inicie sesión pones:

Código
  1. $_SESSION['us'] = new ACC($rs->fetch_row); // Les pasas los datos seleccionados
  2.  

Pongamos que quieres comprobar los permisos de creación:

Código
  1. if(isset($_SESSION['us'])){ // Si no está logeado
  2. header("Location: /");
  3. }
  4.  
  5. if($_SESSION['us']->level & 4)
  6. echo "Tiene permisos para crear";
  7. else echo "No tiene permisos para crear";
  8.  

Ojalá te sea de ayuda.
Saludos!


Título: Re: Pregunta con $_SESSION php
Publicado por: WHK en 14 Agosto 2009, 20:08 pm
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); ?>


Título: Re: Pregunta con $_SESSION php
Publicado por: xalupeao en 14 Agosto 2009, 22:35 pm
Se pasaron  :D realemnte tenia esa duda porque no quiero que mi sistema sea facil de vulnerar!

Gracias.