¿La exposición de una ID de sesión crea un riesgo de seguridad?
No necesariamente. Usted está exponiendo los identificadores de sesión al navegador cada vez que almacena un identificador de sesión en una cookie. Así es como funcionan las sesiones: el navegador debe conocer el ID de sesión para poder enviarlo de nuevo al servidor. La pregunta es cómo estás exponiendo tu ID de sesión. Si lo estás enviando en cookies, está bien, todos lo hacen. Es un riesgo mayor si envía el ID de sesión como un parámetro de URL en una solicitud GET (como lo hace cuando usa su solución de imagen), porque el ID de sesión puede terminar en varios lugares que no esperaba (proxy) registros, registros del servidor, historial del navegador, etc.).
Estoy buscando hacer un inicio de sesión único entre varios dominios, ya que no puedes almacenar cookies en otros dominios de un sitio web, estoy usando etiquetas img con un enlace href a cada sitio web (por ejemplo: ejemplo). com / setsessionid? id = XXXX)
Hay otra forma de hacerlo (ver cómo funciona el protocolo OAuth) que implica algunas redirecciones HTTP inteligentes y básicamente funciona así:
- Construye tu página de inicio de sesión que hace autenticación. Haga que acepte un identificador de cliente y un aleatorio suficientemente largo.
- Cada uno de sus otros dominios se redirecciona a esa página de inicio de sesión cuando un usuario desea iniciar sesión, utilizando su identificación de cliente y una fuente aleatoria, que deben almacenar.
- El servicio de inicio de sesión le permite al usuario iniciar sesión, y cuando el nombre de usuario y la contraseña son correctos, se redirige a un -url "registrado correctamente" en el dominio del cliente. El servicio de inicio de sesión sabe a dónde redirigir porque el dominio del cliente pasó el ID de cliente, que puede usar para buscar dónde redirigir. El servicio de inicio de sesión envía algunos parámetros, como la identificación de usuario del usuario que inició sesión y el punto de acceso aleatorio (sin cambios).
- El "inicio de sesión exitoso" -url de nuevo en el dominio del cliente debe aceptar y verificar el nonce aleatorio que se envió originalmente. Si los nonces no coinciden, no debe aceptar la solicitud. De lo contrario, puede asumir que el servicio de inicio de sesión autenticó correctamente al usuario y puede crear una cookie de sesión autenticada para su propio dominio.
Dependiendo de si desea o no proporcionar un inicio de sesión único, el servicio de inicio de sesión puede configurar su propia cookie de autenticación, de modo que cuando el segundo dominio redirecciona a la página de inicio de sesión, la cookie se envía y el servicio de inicio de sesión puede redirigir a la url de éxito inmediatamente sin pedir nombre de usuario y contraseña.
Esto es extensible, por ejemplo, también funciona cuando se desacopla el servicio de inicio de sesión del resto de su sistema y lo mueve a un servicio de nube en Honolulu. Y una vez que lo haya creado, puede usarlo para permitir que cualquier aplicación web se autentique utilizando su base de datos de usuarios, sin importar dónde esté alojado, simplemente agregue un nuevo ID de cliente y redireccione la URL a su servicio de inicio de sesión.
También puede hacer que sea más seguro si el servicio de inicio de sesión habla directamente con el dominio del cliente, por ejemplo, para que el dominio del cliente se autentique al servicio de inicio de sesión (por ejemplo, no a través del navegador del usuario, sino del servidor al servidor). además de pasar el nonce aleatorio, en su caso, esto es realmente fácil ya que el servicio de inicio de sesión y todos los demás servicios están alojados en la misma máquina, por lo que simplemente puede configurar algunos indicadores en el backend de la base de datos o crear un archivo en el sistema de archivos. .
También tenga en cuenta que el sistema que describí solo es seguro si se puede acceder al servicio de inicio de sesión a través de https, porque de lo contrario, un MITM puede simplemente robar la fuente aleatoria y usarla para autenticarse. Pero, obviamente, eso es algo inteligente que hacer de todos modos, porque si no cifra la página de inicio de sesión, un MITM también puede leer el nombre de usuario y la contraseña que el usuario envía de forma clara.