28 mar 2011

Eliminar datos Exif desde el servidor

Bueno vamos con otro simple articulo dedicado especialmente para mis amigos de flu-project (Pablo y Juanan). Hablemos un poco de Metadatos en las imagenes, la especificacion Exif.

Los datos Exif no es algo nuevo (1998), pero sigue siendo un "problema" muy actual. ¿En que radica dicho problema?Nosotros al tomar una fotografia digital con nuestra camara o celular, sin darnos cuenta capturamos más información que la fotografia. Esta información son los datos de la especificacion Exif, donde almacena dentro de la misma fotografia entre otras cosas, la hora de la toma de la fotografia, resolución, marca de cámara, modelo de la cámara, coordenadas de posicionamiento global del lugar de donde se tomo la foto (segun sea el caso), thumbnail (imagen pequeña de la foto), software de edicion (segun sea el caso), etc...

¿Ahora vemos el problema?

Subimos una foto PRIVADA a Internet y retocamos ciertas partes de la fotografia, para que no se vea donde o con quien estamos, eliminamos la fecha de la fotografia si se imprime y lo que querramos... pero ah!!! que cosas, no borramos los metadatos... Bastará con "destripar" nuestra fotografia con un editor hexadecimal, para ver la hora de la fotografia, hora de edicion, software para el retoque, y podemos extraer el thumbnail, quedando a la vista lo que deseabamos "ocultar"

Ej. Tenemos esta imagen de "KatyPerry", como vemos varias cosas estan modificadas y no se ven claramente :(

 

 Pero si obtenemos el thumbnail.... 

 

VemOOs Claramente como estaba formada la imagen ;)

Ya que dimos la introducción, pasemos a lo divertido y técnico. Solo Nota adicional, en Windows pueden ver los datos Exif con ExifReader.exe y en linux pueden usar exiftool (el que yo uso).

Los profesionales de la seguridad, ya se han cansado de reirse de este problema y de tratar de concientizar a los usuarios.¿Pero entonces ahora todo esta perdido?

No!! Yo digo que es la hora de que los Administradores Web tomen medidas. No es su obligacion, y no tienen por que hacerlo ni tomarse las molestias, pero creo que seria una gran muestra de respeto a sus usuarios, brindarles automaticamente este servicio.

¿Como borrar datos exif desde el lado servidor?

En este ejemplo yo estoy usando, Como servidor local LAMPP, PHP, la extension Exif (http://mx2.php.net/manual/es/book.exif.php) y la clase Imagick (http://mx2.php.net/manual/es/class.imagick.php)

Supongamos que tenemos esta horrenda imagen (127.0.0.1/exif/test.jpg)

 

Usemos un pequeño script para obtener los datos Exif de nuestra imagen (test.jpg) desde el lado cliente.
<?php$exif = exif_read_data( 'test.jpg' );echo '<pre>';print_r($exif);?>

Y obtenemos rapidamente esto:

 

 

Como vemos estamos leyendo la imagen que tenemos en el servidor y con el script exif.php leemos los datos Exif de nuestra imagen.

Ahora LIMPIEMOS!!!!

Usaremos este otro SIMPLE script con la ayuda de la clase Imagick que nos limpia la imagen de metadatos y thumbnails indeseados.

 
<?php$im = new Imagick("test.jpg");header('Content-type: image/jpeg');$im->stripImage();	//Eliminamos Metadatosecho $im;?>
 Nosotros en el navegador solo veremos la imagen sin mas (echo $im;), pero guardemosla y veamos...  Primero veamos cuanto pesan las dos fotos y sus md5sum  

Son MUY diferentes y liberamos .6 Mb de pura Metadata y de la imagen miniatura. Asi es como un buen WebMaster y ChuckNorris hace las cosas!!!

Ahora solo nos queda ver como un simple mortal y usuario veria los datos exif de la imagen nueva. En Linux como ya habia mencionado, con exiftool podemos hacerlo facilmente...

  

Y VOILA!!! Limpiecita muy distinto a como nos salio primeramente los metadatos en la imagen Original.

¿Sera muy dificil esto? , ¿O por qué será que muchos administradores no se tomen la molestia de programar unas cuantas lineas más de codigo?

Bueno espero no haberme extendido demasiado, como acostumbro. Espero que quedara clara la idea del post, puesto que en Internet ya hay mucha información sobre los metadatos y como verlos y borrarlos como usuarios, pero aquí quise mostrarlos desde el lado servidor.

Notas Adicionales:

Para borrar los datos exif como usarios, podemos usar imagemagick y su poderoso programa convert: "convert -strip imagen.jpg salida.jpg".

Para instalar la clase Imagick en lampp pueden seguir este tutorial (http://www.yukei.net/2010/02/soporte-para-imagemagick-en-php-con-lampp/).

No me coman por que en neobits.org tenga las imagenes llenas de metadatos :P mi host no me permitió instalar la clase imagick y la extensión Exif de PHP

 

Saludos ;)

 

Att. hecky@neobits.org

  

4 comentarios:

  1. [...] Eliminar datos Exif desde el servidor [...]

    ResponderEliminar
  2. [...] Por si os interesa el tema de limpieza de metadatos, os dejo con éste otro artículo de nuestro blogger Hecky sobre limpieza de metadatos en imágenes. [...]

    ResponderEliminar
  3. Muy buenas, buen artículo, estoy de acuerdo contigo que viendo que los usuarios no toman medidas los administradores web podrían echarles una mano, sobre todo en páginas donde la privacidad es muy importante.En su día escribí un artículo donde comentaba el problema con fotosprivadas.comOtro problema de los metadatos es que cuando se hacen fotos con moviles modernos que tienen GPS también puede ser guardada la posición donde se tomó la imagen.Por cierto, buena fOtO de Katy Perry!!!

    ResponderEliminar
  4. hola soy nuevo en php me podrías enseñar como hacer para eliminar los datos exif con php, al hacerlo con el código que has publicado me sale el siguiente error. Fatal error: Class 'Imagick' not found in C:\xampp\htdocs\ultimo\eli.php on line 2

    ResponderEliminar