elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Script para bajar archivos subidos con cualquier extensión
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Script para bajar archivos subidos con cualquier extensión  (Leído 2,463 veces)
andresmaiden

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Script para bajar archivos subidos con cualquier extensión
« en: 17 Agosto 2012, 21:38 pm »

Hola a todos, en mi primer post en este foro, les quiero contar como resolví una situación para que me digan si está bien o es una locura.

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


« Última modificación: 21 Septiembre 2012, 00:40 am por andresmaiden » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines