Bueno, en teoría no. No debería haber forma de explotar ese sistema. Sin embargo, hay varias cosas que me gustaría señalarte que quizás no hayas pensado.
En primer lugar, dado que los archivos se descargan a través de un archivo PHP (asumiendo readfile()
con encabezados apropiados), debe colocar los archivos en un lugar inaccesible para los usuarios. En los servidores apache, generalmente el enfoque más fácil es simplemente colocar un archivo .htaccess en el directorio de carga con "deny from all" en él para evitar el acceso externo. Si los usuarios no tienen acceso a los archivos externamente en primer lugar, no hay realmente ninguna preocupación acerca de las extensiones de archivos que causan problemas (aunque cambiar el nombre para propósitos de almacenamiento sigue siendo una buena idea)
En segundo lugar, nombrar el los archivos por hash pueden no ser una idea tan brillante, ya que es posible que se produzcan colisiones con el tiempo. ¿Qué sucede si dos archivos tienen el mismo hash? Sin mencionar, el cálculo del hash es un poco lento, especialmente para archivos más grandes (si se calcula a partir del contenido del archivo, y no el nombre). Como almacenas una entrada en la base de datos, supongo que tienes algún tipo de clave primaria allí (como un campo auto_increment). Yo recomendaría simplemente usar ese número de identificación como el nombre de archivo para el almacenamiento para evitar colisiones (en caso de que no lo sepa, puede obtener el ID generado por la última inserción a través del mysql_last_insert_id()
)
Por supuesto, siempre puede haber problemas con archivos que contienen virus, que pueden infectar la máquina descargando los archivos, pero eso está realmente fuera del alcance de esta pregunta y no afecta al servidor de ninguna manera.
¿Está interesado en la seguridad de su servidor? ¿O del cliente? O (preferiblemente) ambos? Si permite la descarga/descarga de ejecutables, no hay mucho que pueda hacer (vale, tal vez un escáner de virus). Pero, ¿qué pasa con, por ejemplo, ¿guiones? – VolkerK
Me preocupa que alguien cargue un script .php y mi servidor se verá comprometido. No me importa si el cliente descarga realmente un virus :) –
Solo asegúrese de que el script download.php inicie una descarga directa. Es decir, la forma en que el navegador lo verá debería ser que los _contents de download.php_ son exactamente los del archivo que se está descargando. Si haces eso, combinado con tu explicación como se describió anteriormente, siempre y cuando no cometas ningún error realmente estúpido, estarás bien. – Cam