2010-08-04 13 views
6

He estado recorriendo la red durante horas buscando una solución con solo parcial y no soluciones que funcionan para demostrar mis esfuerzos.Cómo evito el acceso directo/descarga a archivos mp3/wav mientras permite que un reproductor de flash acceda a ellos con .htaccess (o PHP)

La solución que se muestra a continuación me pareció una gran solución al principio, pero también bloquea el acceso de mi reproductor flash a los archivos. ¿Podría solo permitir el acceso desde páginas particulares?:

< Files ~ "...">
order allow,deny
deny from all
< /Files>



La solución a continuación parecía grande al principio, ya que no permitió que la gente pueda ver los archivos en el directorio, pero si el usuario conoce la URL exacta del archivo de música, pueden descargarlo:

SetHandler application/x-httpd-php
SetHandler application/x-shockwave-flash

Ahora, me encontré con this post que obliga a un usuario para producir un usuario y contraseña using htaccess pero cuadro de diálogo aparece cuando en la pantalla de reproductor flash. ¿Hay alguna manera para que la página envíe la información de inicio de sesión sin que el usuario haga nada?



Si esto no es un método seguro, alguien puede sugerir un método seguro y relativamente sencillo de implementar esta función de restricción? Las URL y los ejemplos serían muy apreciados

P.S. Este es un sitio de WordPress, por lo tanto, utilizaré PHP como lenguaje de programación para implementar cualquier solución.

P.S. Buscando bloquear la descarga de novatos, NO hackers/crackers/asistentes de Internet.

Gracias

Respuesta

8

Como PHP está disponible, úselo para proteger los archivos. No los tengas en la raíz web, sino en algún lugar accesible para PHP. A continuación, generar una URL de una sola vez de usar como:

<?php 
    $unique = md5(uniqid()); // 32 hex characters 
?> 

entonces almacenar ese valor único en la sesión/servidor/db y tiene otra página validar la cadena única antes de la transmisión del archivo:

<a href="streamer.php?id=6dd4566eb245627b49f3abb7e4502dd6">Stream Me</a> 

Asegúrese de caducar ese token único después del primer uso (o quizás algunas veces si se siente generoso).No impedirá que los recalcitrantes capturen la transmisión HTTP de todos modos, pero debería evitar la vinculación casual.

+1

-1 uniqid() solo es un número aleatorio muy débil y no está destinado a detener ataques. Además, más md5() no hace que el valor sea más aleatorio. Aparte de eso, esto es casi idéntico a mi publicación, pero contiene menos información. – rook

+1

@Rook: envolví uniqid() en una llamada md5() para asegurarme de que los caracteres de salida son compatibles con las URL, no para mejorar la seguridad criptográfica. Puede ser totalmente innecesario. Y aunque uniqid() puede ser débil, es probable que sea "lo suficientemente bueno" en este caso para detener el enlace directo. Si puede mejorar la información/ejemplos proporcionados, agréguela a su respuesta y déjela votar. – Goyuix

0

Siempre habrá alguien capaz de aparecer como si se están ejecutando flash y ser capaz de descargar su música. TamperData se puede usar para ver todo el tráfico que produce el navegador (incluido el flash) y tiene la capacidad de reproducir, interceptar y modificar todas las solicitudes. Flash es fácil de descompilar, pero probablemente no sea necesario.

Lo único que puede hacer es subir la barra e impedir la vinculación directa a su contenido. Puede hacerlo utilizando PHP para restringir el acceso a los medios. Coloque todos los medios fuera de la raíz web o proteja el directorio con .htaccess deny from all. Haga que la aplicación de flash envíe primero una "solicitud de descarga", otorgue a la aplicación de flash un token de uso único temporal (cryptographic nonce). Este token se usa en la próxima solicitud para descargar la música de un archivo PHP. Esto es fácil de engañar, pero es lo mejor que puedes hacer.

+0

Sé que a través de Internet nunca puede ser realmente seguro, pero me estoy dirigiendo al usuario técnico típico que podría ver la ubicación del archivo playlist.xml y explorarlo, abrirlo y luego ir a las URL de archivos mp3 incluidas. No estoy buscando bloquear a los piratas informáticos y las galletas en el salvaje oeste. – Julian

+0

@Julian Estoy hablando de defenderse contra los niños, el más simple de los ataques. Es trivial interceptar el tráfico y descompilar las aplicaciones flash. Puede obtener un servidor verdaderamente seguro, pero este servicio es intrínsecamente defectuoso. Lo que he sugerido es lo que usan los principales vendedores de música como Bleep. – rook

+0

@Julian tampoco utilice palabras como "cracker" y "wild west". Está obteniendo los datos de un pirata informático muy hábil. – rook

3

Como señala The Rook, no se puede tener en ambos sentidos. No puede dar ni dar a sus usuarios acceso a sus datos. No importa cuán complejo sea su esquema de autenticación, los usuarios competentes siempre podrán evitarlo porque para que el reproductor funcione, deben tener credenciales. Personalmente, creo que la solución correcta es reconocer que no se puede evitar que un usuario determinado guarde su contenido y simplemente dejarlo. Si insistes en hacerlo más difícil, la solución adecuada para ti estará determinada por el segmento de usuarios con el que quieres ser efectivo y la cantidad de trabajo que deseas poner en práctica.

Una solución simple sería generar una clave única cada vez que se sirve una página del visor y luego servir el contenido a través de un script PHP que lo verifica. De esta forma, el usuario al menos tiene que cargar la página del visor para el contenido que desea y examinar su fuente para extraer la clave en lugar de simplemente colocar una URL en la barra de direcciones de su navegador. Sin embargo, si su sitio se vuelve popular, alguien probablemente hará disponible un script que lo haga automáticamente. Por ejemplo, vea youtube-dl, un script de Python que descarga videos de YouTube.

En su publicación menciona la contraseña que protege los archivos con Apache. Es posible que la aplicación de Flash Player envíe autenticación HTTP, pero dudo que los reproductores existentes lo admitan y modificar uno para hacerlo requeriría las fuentes y la experiencia con ActionScript. Cualquier solución que sobrevivirá a ataques tan triviales como leer la fuente de la página probablemente requiera modificar al jugador.

+0

Mis disculpas por la redundancia. No estaba recibiendo las notificaciones habituales de "alguien más sumbitted a answer/edited their answer" mientras componía esto. –

-1

Hay otra solución probada y bastante exitosa. Traté de cargar la canción en un iframe. Y el acceso directo a la canción estará restringido en el código php.

Cuestiones relacionadas