Autor
|
Tema: Manera correcta de hacer sesiones (Leído 7,068 veces)
|
lord_Sirikon
Desconectado
Mensajes: 151
Es sólo el silencio que precede a la tormenta.
|
Hola a todos, lo primero: se que hay algunos posts pero ninguno me termina de resolver la duda, segundo: gracias de antemano.
Estoy haciendo una página web (un proyectillo) y quiero poner usuarios, iniciar sesión y todo eso, se que es con el session_start() y eso pero por muchos métodos que pienso, siempre averiguo una forma para explotar ese método.
Cuál es la forma más correcta de utilizar las sesiones?
Me tomo esto muy en serio ya que al fin y al cabo son las contraseñas de los usuarios lo que está en juego
Salu2!
|
|
|
En línea
|
|
|
|
Feedeex
Desconectado
Mensajes: 173
|
Las sesiones hasta donde llegan mis conocimientos son casi imposibles de explotar. Y digo casi porque nunca se sabe todo. Es más, ni siquiera teniendo una vulnerabilidad XSS en tu sitio web podrían robarlas, ya que trabaja del lado del servidor, y no como las cookies.
|
|
|
En línea
|
|
|
|
Kase
Desconectado
Mensajes: 1.288
programa bonito ¬¬
|
exacto.. de todos modos si estas paranoico no hace falta que guardes el password en la session =]
yo en session guardo datos que probablemente utilizare en todas las paginas, como el nombre de usuario que utilizo para ponerlo en el menu
$_SESSION_['USUARIO'] = $usuario y para cuando necesito saber si el usiario esta logueado e echo 2 cosas
if(isset($_session_[usuario])) devolvera true si tienes algo guardado en esa variable o false..
mi segunda opcion es un $_session_[login] = true if ($_session_[login])
si aun estas paranoico podrias cifrar todo con crypt() al guardar session ases un $session_[cifrado] = crypt("esto esta cifrado")
y al checar sus valores no olvides hacer crypts
if ($session[cifrado] == crypt("esto esta cifrado"))
crypt es de una sola via, asi que no hay metodo de desencriptacion...
detodos modos todo esto es incesesario...
lo que si es necesario es que en tu bd encriptes los passwords y eso loases asi:
insert into usuario (usuario,pass) values ('pepito',sh1('perez')); sh1 convertira perez en una cadena cifrada de 40 caracteres =P
el problema eske si tu usuario pierde el password nunca podras decirle cual es... tendras que decirle que cree otro xD
|
|
|
En línea
|
|
|
|
RedZer
Desconectado
Mensajes: 666
|
pues lo ago igual que los demas defino que utilizare sessiones session_start();creo las sessiones con sus respectivos valores $_session['user']=$"mi valor";y para destruirlas session_destroy(); aqui esta otro manual de como usarla http://www.php.net/session_register
|
|
|
En línea
|
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Las sesiones hasta donde llegan mis conocimientos son casi imposibles de explotar. Y digo casi porque nunca se sabe todo. Es más, ni siquiera teniendo una vulnerabilidad XSS en tu sitio web podrían robarlas, ya que trabaja del lado del servidor, y no como las cookies.
Te equivocas, la sesiones no trabajan del lado del servidor, solamente es un archivo que se almacena en el servidor que contiene la información y su nombre corresponde a la id. Si te puedes fijar, al crear una sesión, se crea una cookie con el nombre PHPSESSID (Por defecto) que contiene la ID del archivo de sesión que esta alojado en el servidor. Si puedes obtener la Cookie PHPSESSID que tiene como valor la ID de sesión, puedes sacar provecho... Aveces la ID de sesion puede ir via COOKIE pero de igual manera via GET. Session HijackingCSS History Hack In Firefox
if(isset($_session_[usuario])) devolvera true si tienes algo guardado en esa variable o false..
Error, devuelve true si la sesion esta definida.
Las ID de sesiones genera PHP+Apache casi imposible de adivinar, asi que por un lado son un poco mas segura, si sabes una forma de explotarlo puedes plantearla porque quizás te estés equivocando o la forma de explotarla como dices es por medio de otra vulnerabilidad. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
RedZer
Desconectado
Mensajes: 666
|
+10 ~ Yoya ~
|
|
|
En línea
|
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo
|
|
|
Feedeex
Desconectado
Mensajes: 173
|
@~ Yoya ~: ¿Y de que serviría obtener la ID de la sesión?. Si de todos modos es aleatoria y al destruirla muere.
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Puedes usarla para ver el contenido del archivo que tiene por nombre el ID de sesión, pero seria necesario tener acceso al servidor y es muy poco probable. Ejemplo: <?php $_SESSION['hola'] = 'asa'; ?>
root@yoya:~# cat /var/lib/php5/sess_io8q0sh042ovjq6ssiicsg63n3 hola|s:3:"asa";
La otra opción, es la mas explotada. Seria sustituir tu ID de sesión por la que haz obtenido. Osea, si una web utiliza Sesiones para verificar que estas conectado y saber que rango tienes como puede ser admin, si logras obtener la ID de sesión esa persona estaria conectado/logueado como el rango que tiene, en este caso seria admin. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
Feedeex
Desconectado
Mensajes: 173
|
Comprendo, gracias
|
|
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
Yo cuando uso sesiones o cookies lo que hago es comprobar que los datos son correctos en la base de datos antes de proceder. Por ejemplo, cuando un usuario se identifica puedo crear una cookie o unas variables de sesion con el id del usuario y la contraseña cifrada en MD5 o SHA1, luego en cualquier parte del código que quiero mostrar sólo a usuarios logeados hago lo siguiente: // primero compruebo que no están vacíos if(!empty($_SESSION['user']) && !empty($_SESSION['password']){ //conecto a la base de datos $link=conectar(); // Si encuentra resultados quiere decir que el usuario tiene la información correcta en las variables de sesion // AQUÍ YA ES SEGURO REALIZAR LAS OPERACIONES YA QUE EL USUARIO ES IDENTIFICADO CORRECTAMENTE } }
Yo creo que hacer esto es imprescindible porque las variables de sesión y las cookies pueden ser modificadas por el usuario, por lo tanto si directamente usamos la información que hay en las cookies es fácil que nos provoquen una inyección sql o que manipulen el usuario y obtengan información sin realmente estar logeados. Por lo tanto creo que es lo más seguro, comprobar siempre que la información de sesión o de cookies se corresponde con la información de la base de datos antes de mostrar o procesar información de los usuarios.
|
|
« Última modificación: 29 Abril 2011, 16:10 pm por Spider-Net »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Manera correcta de optener UTC Time Zone de locacion especifica, date('Z')/3600;
PHP
|
Graphixx
|
0
|
2,022
|
3 Mayo 2012, 23:32 pm
por Graphixx
|
|
|
Hay alguna manera de hacer un chat sin hacer muchas peticiones al servidor?
Desarrollo Web
|
70N1
|
0
|
1,977
|
20 Marzo 2013, 01:27 am
por 70N1
|
|
|
[Resuelto] Manera correcta de salvar el contenido de una variable
PHP
|
t4r0x
|
5
|
4,358
|
8 Septiembre 2015, 08:44 am
por t4r0x
|
|
|
controlar multiples usuarios de manera correcta?
PHP
|
t4r0x
|
0
|
2,537
|
22 Agosto 2016, 06:36 am
por t4r0x
|
|
|
¿Cual es la manera correcta de definir un decorador en una clase en pytho3?
Scripting
|
JVBS
|
1
|
2,237
|
2 Marzo 2019, 02:14 am
por Guarrino
|
|