Estoy aprendiendo sobre los mecanismos de seguridad web. He desarrollado el siguiente sistema. en PHP y JavaScript:
asumiendo que tengo una página llamada: messages.php que es un sistema de chat en tiempo real.
- primero cuando se carga la página, se genera un ID de página y luego se almacena una clave de cifrado en una sesión llamada
$_session["key".page_id]
. el uso de page_id hace posible usar una clave de cifrado única para cada página "messages.php" abierta en el navegador. La clave de cifrado y la identificación de la página también se reproducen en la página de esta manera:var key = [generated_key_stored_in_session]
yvar page_id = [generated_page_id]
. - cuando el usuario envía un mensaje, primero se cifra mediante AES con la variable
key
como clave de cifrado. después del cifrado, el mensaje cifrado y la variable page_id se enviarán al servidor con el método POST utilizando Ajax. - Ahora el servidor recibe los datos y carga la clave de cifrado de la sesión con el page_id recibido. y el mensaje recibido será descifrado y almacenado en la base de datos.
- Y ahora el servidor genera una nueva clave que establece un
$_session["key".page_id]
con eso y luego hace eco de la nueva clave de cifrado que será recibida por Ajax y se usará para un mayor cifrado.
Creo que este método no es seguro porque la clave de cifrado se transfiere como texto y es posible leerlo con las herramientas del monitor de tráfico.
He leído sobre el almacenamiento de la clave en un archivo JavaScript y envío el archivo al cliente. ¿Cómo es este método?
¿Cuál es la mejor manera de enviar la clave? y ¿cómo puedo implementar el sistema de clave pública / clave privada aquí?