Estoy tratando de aprender algunas cosas sobre las API de REST y uno de los temas que tengo problemas es la seguridad.
Estoy usando angularjs para la interfaz web y un marco delgado para la API php. He leído algunos artículos (me gustó este ) y comencé a implementar HMAC siguiendo este tutorial (no exactamente los mismos pasos). Me gustaría saber si hay alguna violación de seguridad importante en mi enfoque o si no lo estoy haciendo de la manera correcta.
Mientras uso AngularJS, sé que todo lo que almaceno en el lado del cliente no es seguro. Supongo que el usuario tiene una máquina "limpia como nueva" y sabe lo que está haciendo (probablemente sea el principal usuario de API). Mi mayor preocupación es el hombre en el medio y la replicación.
(En el lado del cliente)
- El usuario ingresa su nombre de usuario y contraseña.
- Su contraseña está encriptada (por ejemplo, sha256) y almacenada como global; (Su nombre de usuario solo se almacena en alguna parte)
- En cada solicitud que la interfaz web envía a la api, se envía un hash hmac en el encabezado en el que se forma el mensaje usando el nombre de usuario, una marca de tiempo, la ruta al recurso, una cadena aleatoria (que tanto el servidor como el cliente es consciente; codificado) y la clave es el hash de la contraseña.
(En el lado del servidor)
Cuando el servidor recibe la solicitud:
- Comprueba la marca de tiempo;
- Comprueba si el nombre de usuario existe en la base de datos;
- Intenta replicar el mismo hash hmac usando para el mensaje las variables (también recibidas en la solicitud) nombre de usuario, marca de tiempo, ruta al recurso y la cadena aleatoria (esta no se recibe en la solicitud; simplemente está codificada) . Para la clave, utiliza el valor almacenado en la base de datos que es la contraseña cifrada del usuario dado.
Si todas las validaciones van bien, el usuario debe ser un tipo de confianza y no solo un hombre en el medio.