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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | | |-+  Upload de imagenes seguro PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Upload de imagenes seguro PHP  (Leído 4,438 veces)
RicRed

Desconectado Desconectado

Mensajes: 66



Ver Perfil WWW
Upload de imagenes seguro PHP
« en: 13 Mayo 2012, 22:13 pm »

Hola a la gente del foro, estoy tratando de hacer un upload de imagenes seguro en PHP, en la cual los usuarios puedan subir imagenes en una carpeta y publicarlas en el foro.

Tengo el siguiente codigo:

Código
  1.        <form action="" method="post" enctype="multipart/form-data">
  2.           <p>
  3.           <input type="file" name="imagen">
  4.           <input type="submit" name="submit" value="Subir" /></p>
  5.        </form>
  6.        <?php
  7.        if(isset($_FILES['imagen'])){
  8.        //configuracion
  9.           $permitidas = array('jpg','jpeg','png','gif'); //extensiones permitidas
  10.           $size=2097152; //tamano maximo en bytes
  11.           $url="http://localhost/otros/upload/"; //con / al final
  12.           $carpeta="images/"; //carpeta de las imagenes
  13.  
  14.           $errores = array();
  15.           $nombre = trim($_FILES['imagen']['name']);
  16.           $ext = strtolower(end(explode('.',$nombre)));
  17.           $tamano = $_FILES['imagen']['size'];
  18.           $tmp = $_FILES['imagen']['tmp_name'];
  19.           $urlimagen=$carpeta.rand().$nombre;
  20.  
  21.           if(in_array($ext,$permitidas) === false){
  22.              $errores[] = 'Extension no permitida';
  23.           }
  24.           if($tamano>$size){
  25.              $errores[] = 'El tamaño del archivo debe ser menor a 2mb';
  26.           }
  27.           if(empty($errores)){
  28.              if(move_uploaded_file($tmp,$urlimagen)){
  29.                 ?>
  30.                 <h3>html</h3>
  31.                 <input type="text" value="<img src='<?php echo $url.$urlimagen ?>'>" /><br />
  32.                 <h3>BBcode</h3>
  33.                 <input type="text" value="[img]<?php echo $url.$urlimagen ?>[/img]" /><br />
  34.                 <h3>Enlace directo</h3>
  35.                 <input type="text" value="<?php echo $url.$urlimagen ?>" /><br />
  36.                 <?php
  37.              }
  38.           }else{
  39.              foreach($errores as $error){
  40.                 echo $error."<br />";
  41.              }
  42.           }
  43.        }
  44.        ?>

Sube archivos con extensiones de imagenes, al subir un php da un error

Extension no permitida

Hay bien, pero pueden burlar el sistema y subir una imagen con codigo php ejemplo, subo una imagen con codigo php y luego edito por post jpg por php y subiria un archivo php?

Espero me ayuden.

Saludos! y disculpen la pregunta.
« Última modificación: 13 Mayo 2012, 22:14 pm por asasasaq » En línea

Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: Upload de imagenes seguro PHP
« Respuesta #1 en: 14 Mayo 2012, 01:48 am »

Hombre, pueden subir una imágen (válida) con código PHP en los comentarios, aunque si has verificado que en tu web no hay LFI, no hay problema ;)

Igual pasala por GD, así se eliminan los comentarios y, también aplicale algo como getimagesize() o similares, si tiran error es que no es una imágen válida, así cancelas el upload y listo.

PD: Filtra también que el nombre no contenga el byte nulo porque, si lo contiene, no estoy seguro pero puede que logren bypassear tu filtro.



Explicación sobre el byte nulo:
Imaginate que tienes esto en PHP:
Código
  1. <? if(file_exists('include/'.$_GET['include'].'.php')) include('include/'.$_GET['include'].'.php'); ?>

Y yo voy a:
file.php?include=../files/avatares/mi_avatar_con_comentario_malicioso.jpg%00

Se incluiría perfectamente el archivo, pues el %00 es el byte nulo, que indica el final del string, por lo que el resto es ignorado y el include queda como include/../files/avatares/mi_avatar_con_comentario_malicioso.jpg, y, al tener los tags PHP <? ?> (la imagen en los comentarios), la función include los evalúa y ejecúta el código, por lo que el atacante tendría el poder de ejecutar código PHP en tu servidor (más que suficiente para hackearte por completo).

Nota: no es necesario que el archivo sea .php para que include() ejecute el código que hay en él (entre los tags <? ?>).

Espero que me hayas entendido.

Saludos.
En línea

I'll bring you death and pestilence, I'll bring you down on my own
WarGhost
I love basket


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Upload de imagenes seguro PHP
« Respuesta #2 en: 19 Mayo 2012, 23:33 pm »

Lo mejor que puedes hacer es pasarla por GD, así evitar la inyección de código .

También puedes ver esto:
http://es.php.net/manual/es/security.hiding.php

Lo mejor es tener un código libre de errores, pero cada eslabón de seguridad adicional ayudan.


Un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con respecto a upload de imagenes
PHP
Latino Heat 3 2,021 Último mensaje 22 Agosto 2008, 04:13 am
por kmykc
Como validar UPLOAD de imagenes correctamente
PHP
Skeletron 6 11,826 Último mensaje 20 Abril 2010, 07:14 am
por Skeletron
Problema con upload de imagenes a BD
Bases de Datos
mokoMonster 0 2,038 Último mensaje 1 Agosto 2010, 20:46 pm
por mokoMonster
Este upload es seguro?
PHP
RicRed 4 4,946 Último mensaje 20 Noviembre 2012, 20:47 pm
por gowend
Bypass Upload de imagenes
Seguridad
RicRed 0 2,225 Último mensaje 3 Noviembre 2012, 14:49 pm
por RicRed
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines