Administramos una aplicación web Java desde un proveedor externo donde tenemos acceso al código fuente.
El usuario puede proporcionar una URL externa que se almacena en una base de datos y luego se incrusta en un sitio web generado por la aplicación web. Sólo los miembros de cosas pueden proporcionar URLs. La URL se ha escapado e incrustado correctamente en la página web como una llamada a un servlet de redirección junto con tres parámetros:
- URL externa
- marca de tiempo de la entrada de la base de datos
- código hash
El hash se calcula a partir de la URL, la marca de tiempo y un secreto del servidor. El secreto del servidor es un GUID calculado al inicio.
El servlet de redirección recalcula el hash y emite un error si no coincide con el hash incrustado.
La desventaja es que en cada servidor, reinicie los cambios secretos del servidor y cualquier hash no será válido. El problema surge con los bots de búsqueda como Google o Yahoo, que ponen en cola las URL rastreadas a través de los reinicios del servidor. Por lo tanto, después de reiniciar el servidor, el registro de errores se inunda con mensajes de URL externas no válidas.
Mis preguntas:
- ¿Es este un patrón común en las aplicaciones web?
- ¿Cuáles son los beneficios de seguridad del hash?
- ¿Es "seguro" calcular el hash sin el secreto del servidor?
- ¿Existen patrones de seguridad que brinden el mismo beneficio de seguridad pero que no sean susceptibles a los reinicios del servidor?
Gracias