2011-03-23 21 views
6

Estoy intentando descubrir cómo puedo proteger las descargas digitales en PHP. Solo necesito algunas indicaciones generales para poder comenzar mi investigación. No parece ser capaz de encontrar nada útil.PHP - Protección de descargas digitales

Quiero que los archivos estén disponibles para que los descarguen mis usuarios, pero no quiere que puedan acceder directamente a la carpeta de descargas. Además, quiero que el enlace de descarga esté disponible solo por un período de tiempo determinado o una única descarga.

¿Podría alguien señalarme en la dirección correcta?

+0

La base de datos es tu amiga. – BoltClock

+0

'' A diferencia de * descargas analógicas * '' @usniorg, ¿puede decirnos qué software de servidor web utiliza, por favor? Impactará la respuesta. – Charles

+0

almacenar archivos fuera de la raíz web lateral, servir a través de la secuencia de comandos –

Respuesta

10

La mejor forma de hacerlo es delegar la gerencia de descarga después de su cheque para el Ministerio de Defensa para apache

x_sendfile 

https://tn123.org/mod_xsendfile/

Uso:

<?php 
... 
if ($user->isLoggedIn()) 
{ 
    header("X-Sendfile: $path_to_somefile"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=\"$somefile\""); 
    exit; 
} 
?> 
<h1>Permission denied</h1> 
<p>Login first!</p> 

Básicamente cuando se envía la cabecera X- Sendfile el mod intercepta el archivo y administra la descarga por usted (el archivo se puede ubicar siempre que lo desee fuera del host virtual).

De lo contrario, puede simplemente poner en práctica un download.php archivo simple que obtiene el ID del archivo e imprime el contenido con readfile después de la comprobación de inicio de sesión

+0

Vale la pena señalar que la compatibilidad con 'X-Sendfile' también está disponible en nginx y lighttpd (que es donde se originó), y es * la mejor opción * si está disponible para usted. – Charles

1

sólo algunos ejemplos: Usted puede colocar sus archivos fuera del documento de la web server root o en un directorio que está protegido por un archivo .htaccess con una regla "deny from all"; a continuación, entrega los archivos mediante una función PHP personalizada que establece los encabezados correctos (tipo MIME, tamaño de archivo, etc.) y devuelve el archivo.

Se puede crear enlaces con identificadores únicos basados ​​en MD5 o SHA1 hashes - unos puntos de reglas mod_rewrite el id a su archivo PHP, buscar el id en la base de datos y hacer sus cheques de tiempo, como

example.com/downloads/73637/a8d157edafc60776d80b6141c877bc6b 

se reescribe a

example.com/dl.php?id=a8d157edafc60776d80b6141c877bc6b&file=73637 

He aquí un ejemplo de hacer algo que desea con nginx y PHP: http://wiki.nginx.org/HttpSecureLinkModule

0

"Secure Download Links ", un script de PHP se puede utilizar para ocultar la URL de descarga o cambiar el nombre del archivo de descarga, tiene la opción para almacenar debajo de la raíz web y para los archivos almacenados arriba de la raíz web que también tiene direcciones http absolutas.