El uso de tokens aleatorios largos como secretos para proporcionar acceso a un archivo puede proporcionar una seguridad efectiva. Recomendaría más de 128 bits para hacerlo realmente fuera del rango de adivinar al azar. Probablemente podría salirse con menos bits, especialmente si califica el límite de IP en función de las conjeturas erróneas. Por ejemplo, si tenía un token de 64 bits u 80 bits y mil millones de estos archivos y fue atacado por una botnet con un millón de direcciones IP distintas, cada una de las cuales podría probar 10 intentos cada 10 minutos, por ejemplo, prohibió una IP durante 10 minutos. después de 10 intentos incorrectos, les llevaría aproximadamente 12 días (token de 64 bits) o 2300 años (token de 80 bits) para encontrar un solo archivo aleatorio.
Sin embargo, para hacer esto de manera segura debe tener en cuenta algunas advertencias:
- Utilice HTTPS. Los intrusos de la red pueden ver (o alterar en secreto) cualquier tráfico a través de HTTP.
- Si el documento tiene enlaces a otras páginas web y un usuario hace clic en dichos enlaces, el servidor web en el otro extremo generalmente verá un encabezado HTTP
Referer
en la solicitud HTTP que proporcionará la URL completa (incluidos los secretos; incluso si el secreto está en un parámetro de consulta como enlace ) y seguirá ocurriendo si el usuario está en modo de navegación privada .
- Es probable que el token aleatorio se almacene en el historial de su computadora (a menos que navegue en modo privado y finalice su sesión).
- Algunos motores de búsqueda se apoderan de su token aleatorio y lo indexan.
- El mecanismo para informar al usuario de la clave posiblemente lo filtre a terceros. El correo electrónico se intercambia potencialmente sin cifrar y, si utiliza un proveedor de correo electrónico externo, los administradores de ese proveedor de correo electrónico podrán acceder a su clave secreta. Muchos usuarios también guardan el correo electrónico de texto sin formato en su computadora con un disco no cifrado (por ejemplo, se puede quitar el disco duro o alguien inicia un CD en vivo para leer el contenido del disco) o dejar la computadora conectada a su cuenta de correo electrónico.
El problema 4 generalmente se puede evitar manteniendo un robots.txt
y prohibiendo un directorio.
User-Agent: *
Disallow: /private/
Puede mitigar los problemas 2 y 3 solicitando al usuario que solicite su documento mediante HTTP POST (a través de HTTPS). Eso es en lugar de hacer clic en un enlace como:
<a href="https://example.com/private/LfliQdgOAkjs9H0Oi5ZZcw">File</a>
Podrías hacer algo como incrustar lo siguiente en un correo electrónico HTML:
<p> Click the button below to get your file:
<form action="https://example.com/private_file/" method="post">
<input type="hidden" name="token" value="LfliQdgOAkjs9H0Oi5ZZcw">
<input type="submit" value="Get File">
</form>
<p>Or go to https://example.com/private_file/ and cut and paste the token <pre>LfliQdgOAkjs9H0Oi5ZZcw</pre>.
Esto evitaría que el secreto apareciera en el historial de su navegador o recibiera enlaces de referencia (ya que la URL simplemente sería https://example.com/private_file/
).
Alternativamente, podría permitir enlaces del formulario https://example.com/private/LfliQdgOAkjs9H0Oi5ZZcw
, pero luego redirigir al usuario a otra URL cuando en realidad sirva al https://example.com/private/document
privado. Esto evitaría el problema # 2 con los encabezados del Referer, pero aún así puede dejar el enlace en el historial de su navegador.