Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Duda Sesiones PHP + AJAX

Estas en el tema de Duda Sesiones PHP + AJAX en el foro de Frameworks JS en Foros del Web. Últimamente me asaltan ciertas dudas respecto al uso de Ajax y PHP, junto con el tema de la seguridad informática y la creación de sesiones. ...
  #1 (permalink)  
Antiguo 23/02/2009, 11:30
 
Fecha de Ingreso: febrero-2009
Mensajes: 3
Antigüedad: 15 años, 2 meses
Puntos: 0
Duda Sesiones PHP + AJAX

Últimamente me asaltan ciertas dudas respecto al uso de Ajax y PHP, junto con el tema de la seguridad informática y la creación de sesiones.

Ahora mismo, hay miles de formularios AJAX+PHP para registrartre, o mandar información y escribir comentarios. Sin embargo, volviendo al tema de login, realmente es un poco absurda la concepción del mismo.

El objetivo de AJAX, es mejorar la interacción del usuario con la aplicación web, por lo cual, intenta realizar "tareas" sin tener que recargar la página completamente, sino una capa de información o elemento... bueno, todos sabemos cómo funciona.

El asunto en el que quiero centrarme, es en los formularios de login basados en PHP junto con AJAX. Se quedan a medias, simple y llanamente. El usuario intenta registrarse, y, sólo y tan sólo en caso de que el login sea incorrecto, devuelven en una respuesta al usuario que se ha equivocado. Sin embargo, cuando se registran, el propio documento .php debe iniciar la sesión y redigir al usuario a una página segura. Por tanto, el uso de AJAX hace la mitad de lo que se podría esperar en primera instancia.

Lo ideal, sería poder realizar un login sin tener que verse afectado por una redirección hacia una página segura, si, realizando un login satisfactorio, al igual que cuando es erróneo, te devuelve los valores que serán necesarios para el funcionamiento de la aplicación. Es simple, se puede hacer, es más, no hace falta redirección alguna, se podría devolver el 'id' del usuario sin más y recargar los elementos necesarios de la página contenedora que vayan a usar dicho 'id'.

Hasta ahí, todo bien, se puede hacer perfectamente. El problema está en que yo no sé demasiado de seguridad informática. Por tanto, no sé si éso sería realmente seguro o habría algún método o solución para realizarlo. El sistema de login sería igual que el actual, junto con sus encriptaciones de contraseñas en sha-1 por ejemplo o lo que se quiera usar, pero, sin un inicio de sesión con session_start() y sin redirección a una página segura. Se podría usar JSON para recibir los bloques necesarios, incluso una variable de inicio de sesión, aleatoria, en una tabla temporal que se enviase cada vez que el usuario registrado realiza alguna acción, y que sería eliminada cuando se cerrase la sesión o la página. Junto con la encriptación sha1, se montaría un https con... ssl por ejemplo, y los datos irían encriptados por la red.

Así pues, la pregunta es... ¿es ésto posible? ¿hay alguna alternativa al inicio de sesión en PHP para crear una web segura? ¿nadie más se ha preguntado por qué no hay métodos alternativos? No creo que sea el primero que ha pensado en algo así, pero no está dentro de mis conocimientos resolverlo de forma correcta, ni, mucho menos, establecer cómo de seguro sería. Pero técnicamente, se podría hacer, y, teóricamente, no lo veo menos seguro.

Muchas gracias por cualquier tipo de respuesta.
  #2 (permalink)  
Antiguo 23/02/2009, 15:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda Sesiones PHP + AJAX

Hola keroseno,

Primero te recomiendo veas que son varios conceptos diferentes los que manejas, en contrato, el asunto de autentificación vs autorización.

El que uses sha1, md5, crypt, etc. es tema de autentificación y aqui no importa de donde vienen los datos ya sea de un formulario HTML normal, un request AJAX, un WebService, etc. Es el mismo proceso, validar y crear la sesión una vez que este autentificado el usuario.

La siguiente parte igual es similiar una vez que estas autentificado en la sesión entonces es donde compruebas si el usuario tiene permisos o capacidad para realizar alguna acción. Esta capacidad la tienes que gestionar en el servidor independientemente de donde venga el request. Es decir no importando si el dato viene de AJAX, o de un GET normal tienes que validar y autorizar que el usuario tenga permisos para hacerlo.

Una vez que logres entender y diferenciar podrás ver que no importa que uses AJAX para traer solamente el ID e inyectarlo donde se vaya a usar, va a ser independiente ya que el servidor tendra que validar independientemente que los datos que le estas entregando son los correctos y que el usuario activo tiene el permiso para hacer lo que requieres.

Saludos
  #3 (permalink)  
Antiguo 23/02/2009, 16:56
 
Fecha de Ingreso: febrero-2009
Mensajes: 3
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda Sesiones PHP + AJAX

GatorV, gracias por tu respuesta, pero creo que no se me ha entendido del todo. Entiendo el concepto de encriptación y su uso, para identificar al usuario correctamente y de forma segura. Éso sé cómo hacerlo y no tengo ninguna duda en ello, gracias. Mi duda es, simplemente, si una vez identificado el usuario, puedo omitir que después session_start(), haga una redirección a una página segura, pasándole las variables de la sesión y lo que sea que utilice.

Lo que pretendo, es, una vez autentificado el usuario, devolver los datos que necesite, vía response sin redirección. Sé que tengo que comprobar si los usuarios tienen permiso para hacer determinadas cosas, de ahí que haya unos determinados roles en la base de datos y que, en caso de hacerme falta, devolveré en la respuesta también al usuario, junto al id, y lo que necesite.

En principio, voy a inyectar el id dentro de los elementos de la página que lo vayan a usar, o hacer que se use como parámetro, vía petición AJAX llamarán a las funciones o métodos que deban llamar y que dicho id tenga permiso para hacer, aunque, en teoría, trataré de impedir que el usuario tenga acceso a cualquier cosa para la que no tenga permiso, diréctamente omitiendo su aparición en el html.

Mi pregunta es, si realmente dicho mecanismo, junto con lo que he expuesto anteriormente, constituye una página web segura, o, en caso contrario, cómo podría hacerlo de forma que fuese igual de seguro que usando sesiones PHP. Porque el registro lo haré en base a una inserción de los passwords y, supongo, que los users encriptados en sha1, y para el login, mandaré dichos elementos encriptados vía ajax para su comprobación, devolveré los elementos necesarios en un array si todo va bien, o un error, como en los distintos formularios ajax para iniciar sesiones, y una vez devueltos, pretendo usar el id, junto con los roles, para crear menús y contenidos personalizados en base al usuario registrado.

Así pues, lo que quiero decir, es si el sistema sería más vulnerable que si lo hiciera de la forma común, o no existe mucha diferencia. Al ejecutar cualquier acción, pasaré dicho id, y el archivo php ya se encargará de devolverme lo que tenga que devolverme. Tal vez dicho id tenga que ir encriptado para no ser susceptible de ser monitorizado, o lo mismo, con un protocolo ssl me vale.

En resumen, lo que quiero hacer es incrementar la experiencia del usuario, quiero que haya una parte pública común a todos, navegable, pero que en cualquier momento, un usuario o admin puedan loguearse para hacer/consultar cualquier detalle sin tener que recargar la página ni que pierdan el sitio en el que se encontraban, tan sólo cargando aquellos menús o botones necesarios.

Todo ello de forma lo suficientemente segura para que no haya problemas. Aunque sé que nada es 100% seguro.
  #4 (permalink)  
Antiguo 23/02/2009, 17:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda Sesiones PHP + AJAX

Como te habia comentado anteriormente son conceptos diferentes, en si un request AJAX es un request HTTP normal, PHP los ve igual, PHP no sabe si es por AJAX o por un form POST o GET normal a menos que tu se lo indiques en el request HTTP.

Es por eso desde el lado de PHP las cosas deben de ser iguales, con session_start() y validando los datos igual, no debes de cambiar nada más que tu respuesta (que en lugar de ser HTML ahpra será en JSON).

Posteriormente inyectas lo que necesites en tu DOM HTML, y como te comento el resultado lo tienes que comprobar desde PHP igual no cambia nada ya que AJAX en si es una tecnologia para el transporte de datos de forma asíncrona, pero de fondo es un request HTTP común y corriente, no cambia en nada como lo ves desde PHP.

La parte de SSL es totalmente independiente de PHP/AJAX/HTML, es parte del protocolo HTTP y sirve para el transporte de datos cifrados desde el cliente al servidor, por lo que si te interesa garantizar la seguridad de tus datos (cuando viajan del cliente al servidor o viceversa) si debes de usar SSL.

Si no te importa más que proteger los datos en el server (contra ataques etc.) SSL no te sirve de nada.

Saludos
  #5 (permalink)  
Antiguo 24/02/2009, 02:56
 
Fecha de Ingreso: febrero-2009
Mensajes: 3
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda Sesiones PHP + AJAX

Pues muchas gracias por tu respuesta. Sé que eran cosas independientes y diferentes, lo que quería era saber si constituía una aplicación segura, ya me ha quedado claro. Gracias.
  #6 (permalink)  
Antiguo 07/11/2010, 19:43
 
Fecha de Ingreso: diciembre-2007
Mensajes: 110
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Duda Sesiones PHP + AJAX

Perdón por revivir un tema, pero no se como encarar la búsqueda de información y google me trajo hasta aquí.

Mi problema es el siguiente.

Supongamos que el usuario con ID=21 modifica datos en una base vía AJAX, desde el boton que guarda datos indico que usuario es el de la sesión y que datos guardar:


Código HTML:
Ver original
  1. <input type="submit" onclick="xajax_guardar(21,'datos a guardar') value="Guardar" />

Como verifico del lado del servidor PHP que el usuario realmente sea el ID=21? Tengo que iniciar las sesiones nuevamente? puedo levantar la sesion del usuario del lado del servidor?????
  #7 (permalink)  
Antiguo 09/11/2010, 16:07
Avatar de iandrade  
Fecha de Ingreso: septiembre-2006
Ubicación: Xalapa, Veracruz, MÉXICO.
Mensajes: 171
Antigüedad: 17 años, 7 meses
Puntos: 6
Respuesta: Duda Sesiones PHP + AJAX

Cita:
Iniciado por GsutavoDeLanus Ver Mensaje
Perdón por revivir un tema, pero no se como encarar la búsqueda de información y google me trajo hasta aquí.

Mi problema es el siguiente.

Supongamos que el usuario con ID=21 modifica datos en una base vía AJAX, desde el boton que guarda datos indico que usuario es el de la sesión y que datos guardar:


Código HTML:
Ver original
  1. <input type="submit" onclick="xajax_guardar(21,'datos a guardar') value="Guardar" />

Como verifico del lado del servidor PHP que el usuario realmente sea el ID=21? Tengo que iniciar las sesiones nuevamente? puedo levantar la sesion del usuario del lado del servidor?????
Para empezar te recomiendo que si quieres encontrar respuesta no revivas temas viejos, es muy poco probable que encuentres soluciones.

y con respecto tu pregunta es un problema de seguridad basico, no se debe entrar a un lugar si no se paso por autenticación antes, es un problema de diseño comun, debes asegurarte que antes de mostrar algo, se inicie sesion (p.ej buscando una variable de sesion en particular y que esta solo se activa en el logueo)
__________________
No todo lo que se hace en segundo plano es AJAX
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:59.