La mejor forma de asegurar una aplicación AJAX
security ssl (6)
Actualmente estoy trabajando en la autenticación de un sitio basado en AJAX, y me preguntaba si alguien tenía alguna recomendación sobre las mejores prácticas para este tipo de cosas.
Mi enfoque original era un sistema basado en cookies. Esencialmente establecí una cookie con un código de autenticación, y cada acceso a los datos cambió la cookie. Además, cada vez que había una autenticación fallida, todas las sesiones de ese usuario se eliminaban de la autenticación, para mantener alejados a los secuestradores. Para secuestrar una sesión, alguien tendría que dejar la sesión iniciada, y un pirata informático necesitaría tener la última actualización de la cookie enviada para suplantar una sesión.
Desafortunadamente, debido a la naturaleza de AJAX, al realizar múltiples solicitudes rápidamente, es posible que vuelvan a estar fuera de servicio, estableciendo la cookie incorrecta y rompiendo la sesión, por lo que necesito volver a implementarla.
Mis ideas fueron:
- Un método basado en sesiones decididamente menos seguro
- utilizando SSL en todo el sitio (parece exagerado)
- Usar un iFrame que esté autenticado en SSL para hacer transacciones seguras (solo asumo que esto es posible, con un poco de hack de jquery)
El problema no es que los datos se transfieran, la única preocupación es que alguien pueda obtener el control de una cuenta que no es suya.
Un método basado en sesiones decididamente menos seguro
¿Qué ocurre si coloca una marca de tiempo "generada" en cada una de las respuestas del servidor y la aplicación AJAX siempre puede usar la cookie con la última marca de tiempo?
Personalmente, no he encontrado que el uso de SSL para todo el sitio (o la mayor parte) sea exagerado. Tal vez hace un tiempo cuando las velocidades y los avances eran más lentos. Ahora no dudaría en poner cualquier parte de un sitio bajo SSL.
Si ha decidido que el uso de SSL para todo el sitio es aceptable, puede considerar el uso de la antigua "Autenticación básica" donde el servidor devuelve la respuesta 401 que hace que el navegador solicite el nombre de usuario / contraseña. Si su aplicación puede vivir con este tipo de inicio de sesión, funciona muy bien para AJAX y todos los demás accesos a su sitio porque el navegador maneja las solicitudes reenviadas con las credenciales apropiadas (y es seguro si usa SSL, pero solo si usa SSL - ¡no use la autenticación básica con http simple!).
Su mejor opción es usar una conexión SSL a través de una conexión previamente autenticada con algo Apache y / o Tomcat. La autenticación basada en formularios en cualquiera de los dos, con una conexión SSL requerida, le proporciona una conexión segura. La aplicación web puede proporcionar seguridad e identidad para la sesión y el lado del cliente Ajax no necesita preocuparse por la seguridad.
SSL es una necesidad, evitando conexiones proxy transparentes que podrían ser utilizadas por varios usuarios. Luego simplemente verificaría la dirección IP entrante con la que se autenticó.
Volver a autenticarse:
- tan pronto como cambia la dirección IP
- en un tiempo de espera superior a n segundos sin ninguna solicitud
- individualmente en cualquier transacción importante
Puede intentar leer el libro Ajax Security, de Billy Hoffman y Bryan Sullivan. Descubrí que cambió mi forma de pensar sobre la seguridad. Hay sugerencias muy específicas para cada fase de Ajax.
Una solución común es ajustar el ID de sesión del usuario y pasarlo con cada solicitud para garantizar que la solicitud proviene de un usuario válido (consulte esta presentación de diapositivas ). Esto es razonablemente seguro desde una perspectiva de CSRF , pero si alguien estaba olfateando los datos podría ser interceptado. Dependiendo de sus necesidades, ssl siempre será el método más seguro.