Quiero crear algunas URL cortas para los archivos y enlaces cargados en mi propio servidor. Bastante simple, subo archivos y mi script me devuelve un enlace. Al acceder, el enlace se traduce al archivo y comienza la descarga. Como es moderno, quiero que mis enlaces sean cortos y no tan parecidos a UUID4, porque son muy largos.
No quiero que alguien intente algunas URL para encontrar un enlace válido. ¿Tal vez debería enviar solo 404 si una IP ya tenía 10 URL incorrectas?
Para crear cadenas aleatorias cortas, estoy pensando en lo siguiente:
- Rellene previamente una tabla SQL
(key, target)
dondekey
distingue entre mayúsculas y minúsculas con todos los valores posibles en un rango definido como[a-zA-Z0-9_-~=]{12}
. Luego seleccione conWHERE target IS NULL ORDER BY RANDOM()
una tecla vacía y úsela. Esto garantizará que nunca genere la misma clave dos veces, pero necesita mucho almacenamiento y puede ser demasiado. - Genero una cadena UUID4 y lanzo un algoritmo hash como SHA3 sobre ella y uso los primeros 12 caracteres del resultado. Entonces trato de insertar esto en mi mesa. Si esto falla, necesito generar un nuevo UUID4 y así sucesivamente ...
Por supuesto, estos son pensamientos muy teóricos, porque creo que estaré bien con 1000 teclas por año. Pero, ¿cómo acortar los servicios de url hacer esto? ¿O no les importa lo "impredecible"?