Evitando el secuestro de sesión

¿Cómo evita que varios clientes utilicen el mismo ID de sesión? Lo pregunto porque quiero agregar un nivel adicional de seguridad para evitar el secuestro de sesiones en mi sitio web. Si un pirata informático descubre de alguna manera el ID de sesión de otro usuario y realiza solicitudes con ese SID, ¿cómo puedo detectar que hay diferentes clientes que comparten un solo SID en el servidor y luego rechazar el intento de secuestro?

EDITAR

He aceptado la respuesta de Gumbo después de una cuidadosa consideración porque me he dado cuenta de que lo que pido es imposible debido a las restricciones de unprotocolo HTTP sin estado. Olvidé cuál es quizás el principio más fundamental de HTTP, y ahora que pienso en esta pregunta parece un poco trivial.

Déjame elaborar lo que quiero decir:

Después de que el Usuario A inicie sesión en example.com, se le asigna un ID de sesión aleatorio, para simplificar, deje que sea 'abc123'. Esta ID de sesión se almacena como una cookie en el lado del cliente y se valida con una sesión del lado del servidor para garantizar que el usuario que inició sesión permanezca conectado a medida que pasa de una página web a otra. Por supuesto, esta cookie no tendría que existir si HTTP no fuera sin estado. Por esa razón, si el usuario B roba el SID del usuario A y crea una cookie en su computadora con el valor 'abc123', habría secuestrado con éxito la sesión del usuario A, pero simplemente no hay manera de que el servidor reconozca legítimamente que el usuario B la solicitud es diferente de las solicitudes del Usuario A y, por lo tanto, el servidor no tiene motivos para rechazar ninguna solicitud. Incluso si tuviéramos que enumerar las sesiones que ya estaban activas en el servidor e intentar ver si alguien está accediendo a una sesión que ya está activa, ¿cómo podemos determinar que es otro usuario el que está accediendo a la sesión de manera ilegítima y no al mismo usuario? quién ya ha iniciado sesión con un ID de sesión, pero simplemente intenta hacer otra solicitud con él (es decir, navegar a una página web diferente). Nosotros no podemos ¿Comprobando el agente de usuario? Puede ser falsificado, pero sin embargo es bueno como una medida de defensa en profundidad. ¿Dirección IP? Se puede cambiar por razones legítimas, pero en lugar de no verificar la dirección IP, sugiero verificar algo como los dos primeros octetos de la IP, ya que incluso un usuario en una red de plan de datos que constantemente tiene una IP cambiante por razones perfectamente legítimas Normalmente solo tendrían los últimos dos octetos de su cambio de IP.

En general, es el HTTP sin estado que nos condena a no poder nunca proteger completamente nuestros sitios web del secuestro de sesiones, pero las buenas prácticas (como las que Gumbo ha proporcionado) serán lo suficientemente buenas para evitar una buena mayoría de los ataques de sesión. Tratar de proteger las sesiones del secuestro negando múltiples solicitudes del mismo SID es, por lo tanto, simplemente ridículo, y anularía todo el propósito de las sesiones.

Respuestas a la pregunta(8)

Su respuesta a la pregunta