Quiero agregar la posibilidad de subir archivos de cualquier extensión y con cualquier contenido a un sistema de administración de servicios. Dentro de las posibilidades tienen que estar archivos de PHP, pero tengo que tener cuidado con la seguridad.
Se me ocurrió al subirlo realizarle lo siguiente a cada archivo:
- Guardo en una tabla de MySQL los datos del nombre, tipo de archivo, usuario que lo subió, etc.
- Le cambio el nombre a algo aleatorio de unos 20 caracteres y sin extensión
- Le cambio los permisos a 000 (se subió como archivo de propiedad de www-data porque fue por Apache)
De esa forma no es accesible, una porque no saben el nombre del archivo en el servidor y otra porque no tienen permiso para nada.
Al bajarlo se hace desde un boton que llama por ajax a un archivo bajar.php que controla que solo el usuario con permiso para ver el archivo puede acceder al siguiente script:
Código:
$file = mysql_fetch_assoc(mysql_query("SELECT nombre, tamaño, random FROM archivos WHERE idarchivo='".$id."' LIMIT 1"));
chmod($file['random'], 0400);
$fd = fopen ($file['random'], "r");
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$file["nombre"]."\"");
header("Content-length: $file['tamaño']");
header("Cache-control: private");
while(!feof($fd))
{
$buffer = fread($fd, 2048);
echo $buffer;
}
fclose ($fd);
chmod($file['random'], 0000);
Les agradezco sus opiniones.
Saludos.
Andresmaiden