Cada vez que se autentique, su aplicación debe cambiar el identificador de sesión que utiliza. Esto ayuda a evitar que alguien configure una sesión, copie el identificador de sesión y engañe al usuario para que use la sesión. Debido a que el atacante ya conoce el identificador de sesión, puede usarlo para acceder a la sesión luego de que el usuario inicie sesión, otorgándole acceso completo. Este ataque se ha llamado "fijación de sesión", entre otras cosas. ¿Cómo puedo cambiar la identificación de la sesión una vez que el usuario inicia sesión en el sistema?Java secure session
Respuesta
invalidar la sesión actual y el obtener una nueva sesión:
//invalidate the current session
request.getSession().invalidate();
/*
get another session and get the ID (getSession()) will create a session if one does not exist
*/
request.getSession().getId();
Obtener el vigente; invalidarlo; cree uno nuevo ...
1) Obtenga la sesión actual con HttpServletRequest.getSession();
2) Borrar la sesión: HttpSession.invalidate();
3) Crear uno nuevo: HttpServletRequest.getSession(true);
Si utilizo este método, una vez que el usuario inicie sesión, primero cerrará la sesión para regenerar el id. –
, ya que blowdart declaró: "Bueno, eso es una limitación del marco de trabajo que está utilizando, me temo". ¿Puede dar un código de ejemplo de su proceso de autenticación? Esto podría ayudar. – Henrik
Hablando en general (porque esto no es un problema de Java en absoluto, es un problema general de la web) la fijación de la sesión se produce cuando las identificaciones de sesión son fáciles de descubrir o adivinar. El principal método de ataque es cuando la ID de sesión está en la URL de una página, por ejemplo http://example.com/index?sessionId=123. Un atacante podría configurar la captura de una sesión y luego insertar el enlace en su página, engañando a un usuario para que lo visite y se convierta en parte de su sesión. Luego, cuando el usuario autentica, la sesión se autentica. La mitigación de esto es no usar ID de sesión basadas en URL, sino usar cookies
Algunas aplicaciones web usarán una sesión de cookie pero la establecerán a partir de la URL inicial, por ejemplo visitando http://example.com/index?sessionId=123 vería la identificación de la sesión en la url y luego cree una cookie de sesión desde allí, estableciendo el id en la cookie de sesión en 123. La mitigación para esto es generar identificadores de sesión aleatorios en el servidor sin utilizar ninguna entrada del usuario como semilla en el generador.
También hay exploits basados en navegador donde un navegador mal codificado aceptará la creación de cookies para dominios que no son el dominio de origen, pero no hay mucho que pueda hacer al respecto. Y Cross Site Scripting ataca donde puedes enviar un comando de script al sitio atacado para establecer la cookie de sesión, lo cual se puede mitigar estableciendo la cookie de sesión como HTTP_ONLY (aunque Safari no respeta este indicador)
Para Java recomendación general es
session.invalidate();
session=request.getSession(true);
sin embargo en un momento en JBoss esto no funciona, - por lo que necesita para comprobar que esto funciona como se espera dentro de su marco elegido.
Intento usar este método, pero el usuario cerrará sesión. Session.invalidate() se llama –
Bueno, eso es una limitación del marco de trabajo que está utilizando, me temo. – blowdart
estoy usando jsf y tomcat, ¿así que tengo algún otro método para resolver el problema? –
Aún está en el servidor mientras invalida la sesión.
//get stuff out of session you want before invalidating it.
currentSession = request.getSession(true);
UserProfile userProfile = (UserProfile) currentSession.getAttribute("userProfile");
//now invalidate it
currentSession.invalidate();
//get new session and stuff the data back in
HttpSession newSession = request.getSession(true);
newSession.setAttribute("userProfile", userProfile);
- 1. Secure Python intepreter?
- 2. Android Secure Storage
- 3. Facebook login secure?
- 4. PHP secure root
- 5. html5 video secure streaming?
- 6. Secure DSA Signing
- 7. Secure Python Markdown Library
- 8. servlet set cookie secure?
- 9. ¿Cómo usar Scala Secure Trait en PlayFramework?
- 10. Java EE 6: ¿Cómo llamar a Stateful Session Bean desde Stateless Session Bean?
- 11. Secure ConnectionString en aplicaciones WinForm
- 12. es 1024 bit rsa secure
- 13. Secure File Delete en C
- 14. ASP.Net Session
- 15. PHP Secure Login - cifrado de la contraseña
- 16. Mejores prácticas para implementar Secure "Remember Me"
- 17. Secure WebSocket (wss: //) no funciona en Firefox
- 18. SignalR y HttpContext/Session
- 19. ASP.NET Session y LINQ
- 20. HTTP Session Tracking
- 21. ASP.NET Session Performance
- 22. JBoss Session Timeout
- 23. MySQL Session Table Approach
- 24. On-Session-expire-event?
- 25. Session unset o session_destroy?
- 26. Asp.net session variable
- 27. Objeto Session con ServletContext
- 28. Restaurar Emacs Session/Desktop
- 29. ASP.NET Session Timeout Testing
- 30. ASP.NET MVC Session Estado
¿Hay alguna razón por la que haya preguntado esto dos veces? http://stackoverflow.com/questions/1138436/can-i-regenerate-my-own-session-id-in-servlet – blowdart
sí, no puedo agregar el comentario y responder el mensaje –