Problemas de SEGURIDAD

manuel_mad
11 de Abril del 2005
En primer lugar un saludo a todos y agradecimiento.

Describo brevemente el problema que tengo para proteger archivos de audio y video en un directorio.

Tengo una web alojada en España que vende audio y video muy especificos. Hay cesta de la compra, pago por servidor seguro etc.. y una vez que el cliente ha comprado se puede descargar los archivos.

Al pinchar en el link de DESCARGAR, hago una consulta a la base de datos comprobando el pago y una serie de variables en una base de datos y si todo es ok, le redirecciono a un servidor alojado en america (los gigas son alli mas baratos).

Es decir, al pinchar en el link, va una pagina llamada descargar.php. Esa pagina comprueba tambien otra serie de datos y mediante un header(location.... ) le envia el archivo, desde una direccion del tipo http://62.135.25.240/archivos/video/este_video.mpg.
(la pagina descargar.php no esta en el mismo directorio que los archivos)

La descarga es transparente al cliente y el fichero se descarga. Sin embargo esa direccion queda en propiedades del archivo y un cliente avispado podria teclear directamente http://62.135.25.240/archivos/video/OTRO_VIDEO.mpg y se lo descargaria.

Problemas:

- no puedo proteger el directorio donde estan los archivos pues entonces apareceria la ventanita para meter usuario y contraseña, lo cual jorobaria al cliente. Y si lo doy esos datos los podria usar igualmente para descargarse otros videos.

- no puedo usar hotlink con el .htaccess en el directorio de los archivos pues windows media player no soporta el HTTP_REFERER, y aunque he intentado permitir SOLO a descargar.php acceso al directorio de los archivos, no funciona (he probado 7 formas distintas segun se indica en http://www.htmlbasix.com/disablehotlinking.shtml y o se descarga siempre - es decir tanto a traves de descargar.php como escribiendo directamente una url de un video - o no se descarga nunca).

Es decir, lo que busco es la forma de proteger el directorio de los archivos para que cuando se escriban directamente su direccion se deniege el acceso PERO que a trave de un fichero (descargar.php) externo a ese directorio se puede acceder y descargar lo que se ha solicitado.

Disculpas por lo largo de la consulta y agradecimientos por adelantado.
Un saludo a tod@s.

joryx
11 de Abril del 2005
Saludos, algo que puedes hacer es generar carpetas aleatorias en el servidor donde tienes alojados tus videos, independientemente como autentifiques a tus usuarios para que hagan una descarga, todo va a depender de como almacenes tus videos en el server, ej,
http://62.135.25.240/archivos/video/este_video.mpg
si ahi tienes un video, el siguiente video puede estar en:
http://62.135.25.240/archivos/video/esderftg/este_video.mpg
o otro video en:
http://62.135.25.240/archivos/video/esdedgg/este_video.mpg

y pues las posibilidades de que encuentren otra carpeta similar son remotas, espero te ayude, asi solucione algunos problemas similares a los tuyos.

Jes?arrillo
11 de Abril del 2005
Hola a todos!!

Mira que te parece si en el servidor donde tienes tus videos bloqueas el acceso, para que solamente puedas accesar mediante FTP con un user y pass. Y luego cuando el usuario vaya a descargar un video, tu archivo.php se conecte mediante FTP al servidor que contiene los videos. Asi en tu archivo.php estableces el acceso el user y pass, el cual solo sera uno en general, no uno por usuario que compre.

Es una solución sencilla pero funciona ;)

Saludos!!!

Atte.
Jesús C.
http://www.php-mexico.com - Fomentando el OpenSource/PHP

tgp
11 de Abril del 2005
pero que hay del problema con los sniffer... cuando alguien ve una pagina por un browser si utiliza un sniffer puede detectar cuales son el password y el user.. al menos eso creo... y prontamente podrian ser de dominio publico... esta bien con un password de acceso pero que no sea ftp porque podrian acceder a todo tu sitio. A mi critero es que lo dejes fuera del public_html y que revises si en la subida de estos archivos no se perdio algo de codigo y por eso no obtienes el video... consulta sobre el manejo de mimes... y pruebalo de con varios videos en forma local... puede ser que el servidor no este configurado adecuadamente.

saludos.

caid
11 de Abril del 2005
Hola.

Dices que descargar.php envía el archivo redireccionando el navegador con header("location..."), ¿no?

¿Por qué en lugar de redireccionar no envías directamente el archivo desde descargas.php? Los pasos serían:

1) Primero envías el tipo mime del fichero con header("Content-type: ...");

2) Lees el fichero a enviar y lo metes en una cadena

3) Escribes la cadena (un simple echo)

De esa forma puedes tener todos los ficheros (excepto descargas.php) en un directorio inaccesible a los usuarios. El único que debe ser accesible es descargas.php, que sólo enviará el fichero tras hacer las comprobaciones que estimes necesarias.

Saludos.