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)
| | | |-+  Como validar UPLOAD de imagenes correctamente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como validar UPLOAD de imagenes correctamente  (Leído 9,654 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Como validar UPLOAD de imagenes correctamente
« en: 19 Abril 2010, 04:45 »

Hola gente.
En mi sitio web se puede subir imagenes, y me pregunto si éste codigo es suficiente para validar que los archivos que se estan subiendo no serán utilizados para realizar algun ataque a la web:

Código
  1. if(substr($_FILES['imagen']['type'],strlen($_FILES['imagen']['type'])-4)=='jpeg'){
  2. //subir archivo
  3. }


En línea

Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #1 en: 19 Abril 2010, 15:25 »

podrias usar la libreria GD, entonces pueden subir cualquier tipo de imagenes (a cualquier tipo me refiero a png, gif o jpg :p jeje) pero no importa el tipo que suban, siempre te las guarda en el servidor con extension jpeg. entonces, como las abre, las decodifica, las vuelve a codificar (pero esta vez siempre en jpeg), si habian subido un archivo .php ya no sirve. hoy toy aburrido asi que te dejo el code xD

Código
  1. function imagecreatefromimg ($flotaImage) {
  2. $tipo = getimagesize($flotaImage);
  3. switch ($tipo['mime']) {
  4. case "image/jpeg":
  5. $finalImage = imagecreatefromjpeg($flotaImage);
  6. break;
  7. case "image/png":
  8. $finalImage = imagecreatefrompng($flotaImage);
  9. break;
  10. case "image/gif":
  11. $finalImage = imagecreatefromgif($flotaImage);
  12. break;
  13. default:
  14. die("Tipo de imagen no válida.");
  15. break;
  16. }
  17. return $finalImage;
  18. }
  19. $imagen = imagecreatefromimg($_FILES['imagen']['tmp_name']);
  20. $directorioImagen = 'imagenes/'.$_FILES['imagen']['name'].'.jpg';
  21. imagejpeg($imagen, $directorioImagen); //guardamos la imagen en el directorio imagenes.
  22. imagedestroy($imagen);
  23.  

Listo :D. Funciona, yo lo comprobe ;)
Cualquier error o duda pregunta!!
Saludos!!


En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #2 en: 20 Abril 2010, 00:37 »

Mira..
Yo valido la iamgen así:
(porque tambien la redimenciono)

Código
  1. if(substr($_FILES['imagen']['type'],strlen($_FILES['imagen']['type'])-4)=='jpeg'){
  2. $aux=imagecreatefromjpeg($_FILES['imagen']['tmp_name']);
  3. $ancho=imagesx($aux);
  4. $alto=imagesy($aux);
  5. if($ancho>400){
  6. $divisor=($ancho / 400);
  7. $ancho=($ancho / $divisor);
  8. $alto=($alto / $divisor);
  9. }
  10. if($alto>400){
  11. $divisor=($alto / 400);
  12. $alto=($alto / $divisor);
  13. $ancho=($ancho / $divisor);
  14. }
  15.  
  16. $dst_img=imagecreatetruecolor($ancho, $alto);
  17. //400px x 400px es el tamaño maximo
  18. imagecopyresampled($dst_img, $aux, 0,0,0,0, $ancho, $alto, imagesx($aux), imagesy($aux));
  19.  
  20. imagejpeg($dst_img,'img/'.$_SESSION['id'].'.jpg');
  21. unlink($_FILES['imagen']['tmp_name']);
  22. imagedestroy($dst_img);
  23.  
  24. $errorsubir='La imagen, ha sido subida correctamente';
  25.  
  26. }else{
  27. $errorsubir='El archivo no ha sido subido. Solo puede ser .jpg<br>Vuelva a intentarlo con otra imagen';
  28. }
  29. return $errorsubir;
  30. }

Que me dices de ese codigo?
En línea

Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #3 en: 20 Abril 2010, 02:25 »

hubieses dicho que usabas GD xD me ahorraba el tiempo :P jejej, igual me gusta programar ;) mira, tu codigo esta joya, ahora, no conozco mucho (ya que no lo trabajo) el valor ['type']. nose si se puede trucar o algo asi... mira, en si, tu code es mezcla de lo mio, porq el tuyo, como bien, guarda la imagen como jpeg, y la redimensiona bien.

ahora si te interesa, podes mezclar mi code con el tuyo, para que el usuario tenga la posibilidad de subir archivos png y gif, junto a jpeg; redimensiones y la guardes como jpeg. eso es cuestion tuya, en si, confio un poco mas en el "getiomagesize()" y "$tipo['mime']" pero me parece que es exactamente lo mismo. ahora queda cuestion tuya, tu pregunta fue resuelta. Tu codigo esta bien. un saludo ;)
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #4 en: 20 Abril 2010, 02:42 »

Perfecto amigo.

Veré si puedo convinar todo entonces... :D
En línea

Castg!
Wiki

Desconectado Desconectado

Mensajes: 1.191



Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #5 en: 20 Abril 2010, 05:00 »

Ya que estamos ;-)


Código
  1. function imagecreatefromimg ($flotaImage) {
  2. $tipo = getimagesize($flotaImage);
  3. switch ($tipo['mime']) {
  4. case "image/jpeg":
  5. $finalImage = imagecreatefromjpeg($flotaImage);
  6. break;
  7. case "image/png":
  8. $finalImage = imagecreatefrompng($flotaImage);
  9. break;
  10. case "image/gif":
  11. $finalImage = imagecreatefromgif($flotaImage);
  12. break;
  13. default:
  14. die("Tipo de imagen no válida.");
  15. break;
  16. }
  17. return $finalImage;
  18. }
  19. $aux = imagecreatefromimg($_FILES['imagen']['tmp_name']);
  20. $ancho=imagesx($aux);
  21. $alto=imagesy($aux);
  22. if($ancho>400){
  23. $divisor=($ancho / 400);
  24. $ancho=($ancho / $divisor);
  25. $alto=($alto / $divisor);
  26. }
  27. if($alto>400){
  28. $divisor=($alto / 400);
  29. $alto=($alto / $divisor);
  30. $ancho=($ancho / $divisor);
  31. }
  32. $dst_img=imagecreatetruecolor($ancho, $alto);
  33. //400px x 400px es el tamaño maximo
  34. imagecopyresampled($dst_img, $aux, 0,0,0,0, $ancho, $alto, imagesx($aux), imagesy($aux));
  35. $directorioImagen = 'img/'.$_SESSION['id'].'.jpg';
  36. imagejpeg($dst_img, $directorioImagen); //guardamos la imagen en el directorio imagenes.
  37. imagedestroy($dst_img);
  38. if(file_exist($directorioImagen) { echo "Imagen procesada exitosamente"; }else{ echo "Error al procesar la imagen"; }
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como validar UPLOAD de imagenes correctamente
« Respuesta #6 en: 20 Abril 2010, 07:14 »

Ouiea!

Tnks!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Upload de imagenes seguro PHP
Nivel Web
RicRed 2 3,506 Último mensaje 19 Mayo 2012, 23:33
por WarGhost
Bypass Upload de imagenes
Seguridad
RicRed 0 1,207 Último mensaje 3 Noviembre 2012, 14:49
por RicRed
Como usar GROUP y ORDER BY correctamente?
Bases de Datos
BEATMASTER 4 6,876 Último mensaje 28 Noviembre 2012, 04:52
por BEATMASTER
las imágenes aveces no se cargan correctamente
Desarrollo Web
soru13 3 1,110 Último mensaje 29 Marzo 2013, 23:31
por soru13
[Pregunta]: ¿Como validar CORRECTAMENTE la subida de imagenes?
Desarrollo Web
MiguelCanellas 3 698 Último mensaje 21 Julio 2019, 04:42
por @XSStringManolo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines