Así que tengo esta aplicación web donde se supone que debo generar mi propia clave de sesión para usarla en el administrador de sesiones. Solo tengo algunas preguntas sobre enfoques seguros para esto.
-
Creo que para hacer esto seguro debería ser una clave generada al azar y es única en cada instancia de los procesos de mi aplicación web. ¿Mi suposición es correcta?
-
Estoy usando Go 1.2 para mi aplicación web y la forma en que estoy generando esta cadena aleatoria es mediante la siguiente función:
func generateRandomSessionKey() string { rand.Seed(time.Now().UnixNano()) alpha := "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789~!@#$%^&{}[]:,.*()_+-/?><." buf := make([]byte, KEYLENGTH) for i := 0; i < KEYLENGTH; i++ { buf[i] = alpha[rand.Intn(len(alpha))] } return string(buf) }
Esta función produce cadenas como: Hu@$pMaNZd.2)%Lpeet{6hYmKAxn:yYt
Ahora sé que algunos podrían discutir por qué no usar "crypto / rand" en lugar de "math / rand" , que ha demostrado ser más seguro, lo he intentado eso y al parecer el crypto/rand generó cadenas no válidas, por ejemplo \x16
que no puede ser utilizado por el marco web que estoy usando ( Beego ). Entonces, ¿lo que estoy haciendo aquí es un enfoque sensato y seguro para generar esta clave?