Foros del Web » Programando para Internet » PHP »

Seguridad para mi upload!!

Estas en el tema de Seguridad para mi upload!! en el foro de PHP en Foros del Web. Hola a todos, acabo de probar un upload que explicaban en un foro sobre estas cosas. Todo va correcto y hace lo que yo quiero, ...
  #1 (permalink)  
Antiguo 11/12/2009, 16:36
Avatar de eminem24  
Fecha de Ingreso: julio-2008
Mensajes: 68
Antigüedad: 16 años, 4 meses
Puntos: 0
Exclamación Seguridad para mi upload!!

Hola a todos, acabo de probar un upload que explicaban en un foro sobre estas cosas. Todo va correcto y hace lo que yo quiero, que es decirme la url del archivo en cuestión para que el usuario pueda descargarlo o acceder a el(porque será de música). Pero me gustaría que sólo se pudieran enviar archivos mp3 y con un tamaño máximo. Y también añadir una barra de proceso para que el usuario sepa cuanto queda.

Pero sobre todo querría saber si es totalmente seguro para código malicioso o lo que sea. En la carpeta de descargas tengo permisos 766, ¿es correcto así?

El upload consta de 3 archivos y no usa base de datos.

El primero es un .htaccess que va en la carpeta de descargas:

Código:
<Files *>
Order Deny,Allow
Deny from all
Allow from localhost
</Files>
El segundo es el archivo upload.php

Código PHP:
<?php
if($_POST){
copy($HTTP_POST_FILES['archivo']['tmp_name'], "./musica/".$HTTP_POST_FILES['archivo']['name']);
echo 
"Archivo subido correctamente";
echo 
"<br>";
echo 
"Link de descarga : http://www.miweb.com/track.php?link=".$HTTP_POST_FILES['archivo']['name'];
}else{
$MIPATH getcwd();
$NOMBRE str_replace($MIPATH."/"""__FILE__);
echo 
"<form action='".$NOMBRE."' method='post' enctype='multipart/form-data' name=¡form1'>";

echo 
"<p align='center'>Archivo:";
echo 
"<input name='archivo' type='file' id='archivo'>";
echo 
"</p>";
echo 
"<p align='center'><input name='boton' type='submit' id='boton' value='Enviar tema'></p>";
echo 
"</form>";
}
?>
Y el tercero track.php:

Código PHP:
<?php
$doc
=$_GET["link"];
$MIPATH getcwd();
 
if (
$doc != NULL ) {
$trozos explode("../"$doc);
if (
$trozos[0] == $doc) {
if (
file_exists($MIPATH."/musica/".$doc)) {
header('Content-Type:application/octet-stream');
 
header('Content-Disposition:attachment; filename="'.$doc.'"');
 
readfile($MIPATH."/musica/".$doc);
} else {
echo 
strip_tags("El archivo $doc no existe o no se encuentra en la carpeta de música.");
}
} else {
echo 
"Detectado LFI.";
}
} else {
echo 
"No se ha ingresado un archivo para descargar";

 
?>
Haber si alguien puede ayudarme con esto, gracias anticipadas! un saludo!
  #2 (permalink)  
Antiguo 12/12/2009, 18:55
Avatar de eminem24  
Fecha de Ingreso: julio-2008
Mensajes: 68
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Seguridad para mi upload!!

Por favor una ayudita!!!
  #3 (permalink)  
Antiguo 12/12/2009, 21:03
 
Fecha de Ingreso: febrero-2006
Mensajes: 858
Antigüedad: 18 años, 9 meses
Puntos: 4
Respuesta: Seguridad para mi upload!!

mas o menos te entendi.
busca un script que te compruebe que extensiones de archivo se suben

saludos
__________________
*La amistad se multiplica cuando se divide*
  #4 (permalink)  
Antiguo 12/12/2009, 21:07
Avatar de Vitesse92  
Fecha de Ingreso: diciembre-2009
Ubicación: Internet
Mensajes: 145
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: Seguridad para mi upload!!

solo tienes que agregar condicionales, busca en las FAQ's del foto,creo que ahi estan, y el peso del archivo...
Con lo de codigo malicioso, pues con le comprobante de la extencion sabras que no es un archivo de texto que se pueda ejecutar desde el servidor...
(:
Eso es lo que yo manejo de los Uploads...
  #5 (permalink)  
Antiguo 12/12/2009, 21:12
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Seguridad para mi upload!!

Vamos de a partes, para validar la extension pdes usar expresiones regulares, por ejemplo

Código PHP:
function validate($string){
   if(
preg_match('\b.mp3\b/i',$string)){
        return 
true;
   }else{
        return 
false;
   }

Para validar el peso del archivo usas filesize(), asi:

Código PHP:
function getWeight($file){

    
#10 Mb
    
if(filesize($file)<(10*1024*1024)){
        return 
true;
    }else{
        return 
false;
    }

Es mas, mas que preg_match tal vez podrias usar:

Código PHP:

function validate($string){
    if(
substr($string,-4,strlen($string))=='.mp3'){
        return 
true;
    }else{
        return 
false;
    }

Para obligar que las ultimas 4 letras correspondan a la expresion =P
  #6 (permalink)  
Antiguo 12/12/2009, 23:13
Avatar de eminem24  
Fecha de Ingreso: julio-2008
Mensajes: 68
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Seguridad para mi upload!!

Muchísimas gracias a todos por las respuestas! Probaré de añadir el código que me comentas jackson666. Si me funciona bien postearé el código completo para quien lo quiera implementar en su web.

Por cierto, me preocupa si es o no seguro todo el código y si podrían subirme algo malicioso. Lo de los permisos de la carpeta de descargas es correcto con permisos 766 o debería ser 744?

Gracias de nuevo amigos, un saludo!!
  #7 (permalink)  
Antiguo 17/12/2009, 12:14
Avatar de eminem24  
Fecha de Ingreso: julio-2008
Mensajes: 68
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Seguridad para mi upload!!

He probado de agregar esos códigos jackson666 y no me funciona. Está claro que algo hago mal(porque soy muy malo con php). En realidad no se ni en que archivo lo tengo que colocar.

Yo he probado de añadirlo al archivo "track" de esta manera:

Código PHP:
<?php
function validate($string){
    if(
substr($string,-4,strlen($string))=='.mp3'){
        return 
true;
    }else{
        return 
false;
    }
}

function 
getWeight($file){

    
#10 Mb
    
if(filesize($file)<(10*1024*1024)){
        return 
true;
    }else{
        return 
false;
    }
}

$doc=$_GET["link"];
$MIPATH getcwd();
 
if (
$doc != NULL ) {
$trozos explode("../"$doc);
if (
$trozos[0] == $doc) {
if (
file_exists($MIPATH."/musica/".$doc)) {
header('Content-Type:application/octet-stream');
 
header('Content-Disposition:attachment; filename="'.$doc.'"');
 
readfile($MIPATH."/musica/".$doc);
} else {
echo 
strip_tags("El archivo $doc no existe o no se encuentra en la carpeta de música.");
}
} else {
echo 
"Detectado LFI.";
}
} else {
echo 
"No se ha ingresado un archivo para descargar";

 
?>
Pero no me dice nada y se pueden subir archivos de cualquier formato. Por favor ayudilla, ya me falta poco para tenerlo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:22.