Foros del Web » Programando para Internet » PHP »

como saber que una imagen es imagen!!

Estas en el tema de como saber que una imagen es imagen!! en el foro de PHP en Foros del Web. hola alguien sabe como verificar que la imagen subida por un usuario sea imagen, si ya que mirando la extension.... pero yo me refiero a ...
  #1 (permalink)  
Antiguo 26/10/2009, 22:01
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
como saber que una imagen es imagen!!

hola alguien sabe como verificar que la imagen subida por un usuario sea imagen, si ya que mirando la extension.... pero yo me refiero a algun modo de chequear o scanear la imagen para comprobar que no se trate de un archivo php con extension jpg o similar....

se entiende

saludos!!
  #2 (permalink)  
Antiguo 26/10/2009, 23:21
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: como saber que una imagen es imagen!!

mm, me parece que lo dices por la seguridad, no? sobre el riesgo de que alguien te suba una Shell encriptada a tu server?? Lo que yo sabía es que por lo general eso es la seguridad del server completo, es decir Lo que hayan instalado los del hosting para seguridad del mismo.

Bueno no me creas mucho eso es lo que recuerdo de antes.

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 26/10/2009, 23:50
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

mmm creo que voy lidear un poco el codigo, he pensado en agregar, a la imagen que suba el usuario el nombre de usuario + fecha + mas la hora + time pasado por mod5 + un_ID + la extecion ....

de este modo cambio el nombre de la imagen, y solo el servidor sabra el nombre y yo


luego oculto la url de la imagen ropiendome la cabeza

Código PHP:
<?php

algo para tomar el id imagen desde DB 

?>
luego muestro la imagen en la web o donde sea de este modo:

Código PHP:
<img src='http://www.dominio.com/imagen.php?id_img=xxxsss'
de este modo solo tengo que validar el ID imagen y verificar que sea numerico

¿verdad alguna opinion??

¿alguien que sepa como hacerlo? o que de un idea

una vez lei por ahi que habia una forma de analizar las cabeceras de las imagenes pero no se... como era...
saludos!!

Última edición por zerpico_01; 26/10/2009 a las 23:59
  #4 (permalink)  
Antiguo 27/10/2009, 00:15
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: como saber que una imagen es imagen!!

hola:

Creo que puedes usar getimageSize()... puedes verlo en este artículo: Revisar las imágenes antes de subirlas.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 27/10/2009, 07:26
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

Cita:
Iniciado por caricatos Ver Mensaje
hola:

Creo que puedes usar getimageSize()... puedes verlo en este artículo: Revisar las imágenes antes de subirlas.

Saludos
mmm si esta bueno el articulo pero creo que si termino con session_destroy();
tambien eliminaria la seccion del usuario por consiguiente sube la imagen y pierde la seccion login... esta bueno ahora habra que probarlo a ver si funciona la verdad que un capo el tio ese evitar que la imagen sea mostrada por los navegadores desde la memoria caché
nunca se me hubiera ocurrido.... APROBAR!!!

gracias por la ayuda
  #6 (permalink)  
Antiguo 27/10/2009, 08:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como saber que una imagen es imagen!!

Puedes usar getimagesize() para verificar que sea una imagen.

Saludos.
  #7 (permalink)  
Antiguo 27/10/2009, 08:45
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: como saber que una imagen es imagen!!

Hola:

Cita:
Iniciado por zerpico_01 Ver Mensaje
mmm si esta bueno el articulo pero creo que si termino con session_destroy();
tambien eliminaria la seccion del usuario por consiguiente sube la imagen y pierde la seccion login... ...
El artículo es solo una referencia... evidentemente tu caso es otro, pero supuse que podría servirte el código... creo que debes mirar la parte sobre el control de la imagen...

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar getimagesize() para verificar que sea una imagen.

Saludos.
¡Je, je!... qué bien que coincidamos...

zerpico_01... te toca mover ficha... si no te vale, pon lo que llevas hecho.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 27/10/2009, 08:55
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

Cita:
Iniciado por GatorV Ver Mensaje
Puedes usar getimagesize() para verificar que sea una imagen.

Saludos.
cada dia me doy cuenta de lo mucho que me falta aprender...

voy usar esto es menos complicado... pero habia leido una vez que en ieploret esto no funciona..
es cierto esto?

gracias voy a estudiar mas
  #9 (permalink)  
Antiguo 27/10/2009, 10:57
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: como saber que una imagen es imagen!!

che, pregunto no, desde la inexperiencia, que tal si de ultima, para ver si en realidad es un archivo o una imagen, no tratas de abrirla? es decir, haces un fopen y haces q se lea un toke de codigo, y si lo lee es porque es un archivo, sino, es una imagen. que se yo, proba, no perdes nada, fijate si te sirve, y si no bueno.... a seguir buscando =)
  #10 (permalink)  
Antiguo 27/10/2009, 11:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: como saber que una imagen es imagen!!

Cita:
Iniciado por kadas99 Ver Mensaje
che, pregunto no, desde la inexperiencia, que tal si de ultima, para ver si en realidad es un archivo o una imagen, no tratas de abrirla? es decir, haces un fopen y haces q se lea un toke de codigo, y si lo lee es porque es un archivo, sino, es una imagen. que se yo, proba, no perdes nada, fijate si te sirve, y si no bueno.... a seguir buscando =)
bueno, si haces fopen() a un archivo de imagen, audio, o lo que sea siempre vas a poder leerlo...

claro que, lo que te va a resultar en caso de no ser texto, es información binaria...

pero es exactamente lo mismo, el hecho de que sea imagen no va a impedir que fopen/fread funcione...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 27/10/2009, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como saber que una imagen es imagen!!

Que es lo que hace getimagesize (que es independiente del navegador ya que se ejecuta en el servidor (es una función de PHP)).

Saludos.
  #12 (permalink)  
Antiguo 28/10/2009, 02:14
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: como saber que una imagen es imagen!!

Hola:

También se me ocurre que se puede consultar el campo type del array $_FILES durante la subida, y si empieza por "image/" será porque el mime del fichero sea el de una imagen...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 28/10/2009, 05:58
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

pues luego de leer este articulo

http://www.xombra.com/go_articulo.php?nota=67

lean la parte que dice sobre --->función PHP getimagesize()....

ya no se que pensar con todo esto me parece algo ilusorio pero por las dudas....

igualmente sigo adelante con mi codigo, creo que se puede por lo que he leido:

getimagesize() y los tipos MIME
Código PHP:
<?php
$tam 
getimagesize($nombre_archivo);
$da fopen($nombre_archivo"rb");
if (
$tam && $da) {
  
header("Content-type: {$tam['mime']}");
  
fpassthru($da);
  exit;
} else {
  
// error
}
?>
channels será 3 para imágenes RGB y 4 para imágenes CMYK. bits es el número de bits para cada color. Sin embargo, para algunos tipos de imagen, la presencia de estos valores puede ser un poco confusa. Como un ejemplo, GIF siempre usa 3 canales por píxel, pero el número de bits por píxel no puede ser calculado para un GIF animado con una tabla de colores global.

En caso de fallos, se devuelve FALSE.

pero a un no me queda muy claro como identifica un jpg o un gif , de todos modos lo que tengo hecho es algo asi:

Código PHP:
<?php 
//tomo nombre de imagen para ver como se llama 
$imgen_nombre1=$_FILES['imgen_nombre1']['name'];
///reemplazo caracteres especiales en el nombre 
//llamo a mi funcion $cambio_carateres
$imgen_nombre1=str_replace($cambio_carateres,'',$imgen_nombre1);
//SI hay una imagen en el formulario de subida
if(!empty($imgen_nombre1))
{
 
$extension=$_FILES['imgen_nombre1']['type'];
//almaceno temp 
 
if($extension=="imagenes/pjpeg" || $extension=="imagenes/png" || $extension=="imagenes/gif" || $extension=="imagenes/jpeg")
 {
 
 
///agrego para verificar imagen no me queda claro a un como usar esta cosa :-(  
 
$tam getimagesize($imgen_nombre1);
$da fopen($imgen_nombre1"rb");
if (
$tam && $da) {
  
header("Content-type: {$tam['mime']}");
  
fpassthru($da);
  exit;
} else {
//envio un mail por si las dudas de la imagen 
mail("[email protected]""URGENTE SE INTENTA SUBIR FICHERO COMO IMAGEN Y NO ES IMAGEN EN PORTAL!!",
        
$_SERVER['REMOTE_ADDR']);
//MUESTRO UN MENSAJE PARA QUE EL PILLO HAGA CLIC  
//    lo llevo a una pagina que deseo, alli puedo colocar lo que quiera :-)
//un mensaje un auto-descarga etc etc...
   
echo "Su post ha sido insertado con exito <a href=\"exitoB.html\"><?=$categoryname?></a>";
   exit;
}
/// SI PASA el getimagesize uno continuo
  
srand();
  
$llave=substr(md5(rand(0,1000)),0,5); 
  
$imgen_nombre1=urlencode($imgen_nombre1);
  
$fecha_subida=date("d-m-Y"); 
  
//creo el nuevo nombre para la imagen
  
$imgen_nombre1="$fecha_subida"."_"."$grabo_nombre_usuario"."$llave"."_"."$imgen_nombre1";
///AHORA AQUI ES DONDE ME ROMPO EL MATE PENSADO 
//PUES EN ESTE PUNTO DEBERIA CAMBIAR EL NOMBRE DE IMAGEN EL TEMA ES QUE SI CAMBIO EL NOMBRE
// EL ARCHIVO PIEDE LA EXTENSION Y NO TENOG LA PALIDA IDEA DE COMO AGREGARLE UNA NUEVA EXTESION
//O SEA AGREGAR LA MISMA EXTENSION QUE TENIA ANTES Y LUEGO ALMACER EN LA DB UN ID PARA PODER LLAMAR 
//LLAMAR A LA IMAGEN <img src='http://www.miweb.com/imagen.php?id_imgen=xxx'>
// de este modo se podra controlar que el id_imagen siempre sea un numero sin extension
// PERO AUN NO SE COMO HACERLO :-(  
//ADEMAS SI SE LOGRARA IMPLEMENTAR EL TIO QUE SUBIO LA IMAGEN JAMAS SABRA CUAL ES EL NOMBRE
//DE LA MISMA Y SI LO SUPIERA NECESITARA UNA LLAVE :-)
// DE MOMENTO LO TENGO ASI 
//guardo en directorio la nueva imagen
  
$directorio_subida="imagenes_subidas/$imgen_nombre1";
  
move_uploaded_file($_FILES['$imgen_nombre1']['tmp_name'],$directorio_subida);
  
chmod ("$directorio_subida",0755); 
  
 
///aprovecho para generar las miniaturas de las imagenes 
//bueno aqui uso un archivo externo para crear las iamgenes pequñas
//el cual voy a llamar con un require   
  
list($alto_archivo,$ancho_archivo)=getimagesize($directorio_subida);
  
$dir_chicas="chicas/".$imgen_nombre1;
//doy el ancho y alto de las imagenes chicas  
//donde subida_chica es una funcion a crear en el archivo que
//reducira la imagen
  
$subida_chicas=reduce_image($directorio_subida,80,80,$dir_chicas);

//ahora creo la seccion imagen_nombre para pasar a la siguiente pagina
//   
 
$_SESSION['imgen_nombre1']=$_FILES['imgen_nombre1']['name'];
 
$_SESSION['imgen_nombre1']=$imgen_nombre1;

 }
 else
 {
 
///algo para avisar que debe cargar una imagen
 
}
 }
 
///
   
if(!empty($_SESSION[image1])
  {
  if(empty(
$_SESSION['image1']))
  {
  
//erro la secion es vacia o algo
  
}
  }
 
?>
si se pudiera canbiar el nombre de la imagen en el punto que indico usando un un ecriptado md5 ahi estaria bueno por que luego se podria controlar que sea un numero relacion con id en BD, la macana es que hacer esto a la variable $imgen_nombre1 implicaria peder la extension del archivo, y luego se almacenaria un arhcivo sin extension....

pos no se si esta bien pero es lo que tengo luego voy a probar si funciona, en terioria deberia funciona, pero ya saben como es esto

saludos!!

Última edición por zerpico_01; 28/10/2009 a las 06:08
  #14 (permalink)  
Antiguo 28/10/2009, 09:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como saber que una imagen es imagen!!

Ese articulo ya habla en caso de que el hacker tuviera acceso al servidor en cuyo caso creo ya no es solo el problema desde PHP si no de la seguridad de tu sitio, getimagesize es bastante seguro al poder identificar las imagenes.

Saludos.
  #15 (permalink)  
Antiguo 28/10/2009, 21:00
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

Cita:
Iniciado por GatorV Ver Mensaje
Ese articulo ya habla en caso de que el hacker tuviera acceso al servidor en cuyo caso creo ya no es solo el problema desde PHP si no de la seguridad de tu sitio, getimagesize es bastante seguro al poder identificar las imagenes.

Saludos.
si eso ya me ha quedado claro el tema es GatorV si esta bien mi codigo ya que no se donde jorak meter el getimagesize

saludos! gracias nuevamente...
  #16 (permalink)  
Antiguo 29/10/2009, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como saber que una imagen es imagen!!

El getimagesize lo debes de ocupar al validar si la foto es imagen o no.

Saludos.
  #17 (permalink)  
Antiguo 30/10/2009, 05:11
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: como saber que una imagen es imagen!!

seria mucho pedir un ejemplo por que no entiendo ...

saludos
  #18 (permalink)  
Antiguo 30/10/2009, 08:05
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: como saber que una imagen es imagen!!

Cita:
Iniciado por zerpico_01 Ver Mensaje
seria mucho pedir un ejemplo por que no entiendo ...

saludos
Hola:

En el artículo de mi primera respuesta puedes comprobarlo... además en ese mismo artículo hay un enlace de un formulario de ejemplo... el código es el del artículo, y recuerdo que para probarlo renombre un txt a jpg para ver si colaba...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #19 (permalink)  
Antiguo 30/10/2009, 09:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: como saber que una imagen es imagen!!

un ejemplo?
Código PHP:
Ver original
  1. $sFile = './foto.jpg';
  2. $result = @getimagesize($sFile);
  3. if ($result === false) {
  4.       die("no es una imagen");
  5. }

Saludos.
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 17:12.