¿Cómo puedo configurar descargas firmadas?

1

Escenario

Tengo un servidor web que autentica y redirige de HTTP a HTTPS. Los clientes pueden ver las "descargas" disponibles en su cuenta. Quiero poder firmar estos enlaces de descarga. Al igual que en, quiero que el enlace sea utilizado solo por el usuario autenticado, solo una vez, y quiero poder recuperar información sobre cuándo se usó un "token" específico. .

Pregunta

¿Cómo se llama esto en realidad? Parece que no puedo encontrar nada al respecto, y estoy seguro de que lo he visto antes. Solo necesito saber cómo se llama o qué es un recurso al respecto para poder leerlo e implementarlo.

Como pregunta adicional: ¿Alguien sabe de antemano cómo implementar conexiones de base de datos autenticadas con clave pública en PHP (como mysql_connect (); o lo que sea, pero cuando la base de datos está en la red local en lugar de en la misma máquina, no lo hace? No quiero que la conexión sea detectable)

    
pregunta gal 24.02.2013 - 06:14
fuente

2 respuestas

4

No sé sobre la terminología, pero restringir el acceso a un enlace de descarga es simple. Por ejemplo, (suponiendo un entorno LAMP), podría generar un hash de descarga (token) para cada par de páginas de descarga del usuario. Ahora, en la página de descarga, verifique si el usuario conectado (extraído de $_SESSION ) tiene acceso a la página dada (usando MySQL) y verifique el hash (de $_GET ). Deje que el usuario descargue la página (utilizando header('Content-disposition: attachment') seguido de readfile($filename); ) y luego revoque el acceso al token dado eliminándolo de la base de datos.

Sin embargo, dado que está redirigiendo de HTTP a HTTPS, la sesión cambiará. En este caso, puede propagar la sesión pasando el ID a través de GET / POST utilizando la técnica descrita here .

Aunque tener un inicio de sesión HTTP para una página HTTPS es una mala práctica: el intermediario aún puede rastrear la contraseña / etc.

    
respondido por el Manishearth 24.02.2013 - 08:25
fuente
3

Hay dos maneras de restringir el acceso a un dato: con procedimientos y con matemáticas .

Procedimientos: esto requiere que su servidor de alguna manera sepa quién está conectado. Necesitará algún tipo de autenticación de usuario (por ejemplo, inicio de sesión + contraseña). Ejecutar todo en una sesión SSL es un buen comienzo. Una vez que sepa quién está conectado, es bastante sencillo para un servidor conceder o denegar el acceso a cualquier enlace de descarga específico y registrar cualquier acceso.

Las cosas se vuelven (mucho) más complejas si no solo quiere saber que un usuario descargó un archivo, sino que también quiere poder demostrarlo (por ejemplo, para un juez durante la posterior disputa legal).

Matemáticas: la criptografía puede concentrar el problema de acceso a los datos en el problema de conocer las claves . Puede cifrar cada archivo con su propia clave aleatoria y dejar los archivos como una descarga gratuita para todos. Pero, por supuesto, los datos del archivo permanecen ocultos para quien no tenga la clave del archivo. Dado que una clave de archivo no es más que una secuencia de 16 bytes aleatorios, la distribución de las claves de archivo puede reducirse de muchas maneras, incluidos "métodos físicos" como scratchcards . En este tipo de configuración, no tiene que restringir el acceso a los archivos o incluso usar HTTPS; se presumirá que un usuario pudo descargar el archivo tan pronto como obtuvo la clave.

Nota importante: no puede evitar que un usuario que haya descargado el archivo una vez guarde una copia del mismo o lo distribuya a quien quiera. A los distribuidores de contenido multimedia les encantaría poder aplicar una restricción de este tipo, pero no es posible mientras la computadora del usuario aún es su .

    
respondido por el Tom Leek 24.02.2013 - 16:03
fuente

Lea otras preguntas en las etiquetas