2011-08-05 16 views
8

¿Es seguro utilizar¿Seguridad de sesión?

If ($_SESSION['authenticated'] == true) { 
    /////Show secure page 
} 

Puede alguien sólo tiene que ir y cambiar el lugar donde se almacena la variable de sesión para hacer sus $ _SESSION [ 'autheticated'] = true?

Lo mismo ocurre con un usuario que tiene $ _SESSION ['id'] = en su ID de índice. ¿Cómo podría hacer esto más seguro? ¿Podría alguien simplemente ir y cambiar el valor de identificación y hacerse pasar por otro usuario?

¿Sería el siguiente método la forma correcta de hacer algo más seguro?

$_SESSION['random_check'] = (random number) 

y almacenar esto en una columna en mi base de datos y cada vez me

If ($_SESSION['authenticated'] == true && $_SESSION['random_check'] == random_number) { 
/////Then show secure page 
} 

Gracias,

+0

utilizo este método para todos mis proyectos 'booleans' combinados con un hash del nombre de usuario y la fecha se haya identificado (también actualizada en el db + retenido en la sesión), luego cuando se realiza la verificación, todos se comparan como válidos y se actualizan nuevamente. Si estoy en el alojamiento compartido, cambie la ruta de guardado solo en caso de que & h. acceda a la carpeta. –

Respuesta

3

Estoy bastante seguro de Sesión en la mayoría de alojamiento es sólo una interfaz para su sistema de archivos, es decir, todos los datos de la sesión se almacenan en el disco duro del servidor; si mira la salida phpinfo(), puede ver dónde está la ruta real de los datos de la sesión.

Dicho esto, a menos que modifiques tu ruta de sesión al 777 y el atacante sepa dónde estás alojando tu aplicación y tiene el inicio de sesión, entonces no creo que sea un gran problema.

El problema más importante aquí es asegurar su cookie, ya que es la información que va y viene a través de su servidor y cliente, que los atacantes pueden usar para hacerse pasar por usuarios legítimos.

1

Sí, es seguro de usar. Yo uso esto. Hago esto: -pruebe el inicio de sesión, si es un inicio de sesión válido, configure $ _SESSION ['logged'] = 'yes' y genere um token $ _SESSION ['token'] = 'token' este token, guardo en un elemento html de entrada y verifica cada acción. algo como:

<?php 

    class token { 



     public function generateToken() { 

      return $_SESSION['token'] = md5(microtime()); 

     } 



     function generateField($name = "token"){ 

      return "<input type='hidden' value='{$_SESSION['token']}' name='{$name}'>"; 

     } 



     public function getToken() { 

      return $_SESSION['token']; 

     } 



     public function getTokenFromFields($method = "GET") { 

      return strtoupper($method) == "GET" ? $_GET['token'] : $_POST['token']; 

     } 



     public function checkToken() { 

      return $this -> getToken() == $this -> getTokenFromFields(); 

     } 

     public function updateToken() { 
      $_SESSION['token'] = md5(microtime()); 
     } 

    } 



?> 

<?php 
//orther file 
require 'class.token.php'; 
$token = new token(); 
$Atoken = $token -> generateToken(); 
echo "<script> 

     var data = {}; 

     data['token'] = '{$Atoken}'; 

     data['foo'] = 'baa'; 
    </script>"; 
$token -> generateField(); 
?> 

<script> 
$.ajax({type:"GET", url:"process.php", "data=foo=baa&token=" + data.token, success:function(response) { } }) 
</script> 

En process.php:

<?php 
if($_SESSION['token'] == $_GET['token']) { 
//do something 
} else die('bad token'); 
?> 
Cuestiones relacionadas