Foros del Web » Programando para Internet » PHP »

mime type

Estas en el tema de mime type en el foro de PHP en Foros del Web. hola buenas tengo un serio problema y buneo la cuestion es que la funcion mime_content_type cuando es una imagen png no devuelve el mime images/png ...
  #1 (permalink)  
Antiguo 07/01/2009, 18:52
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
mime type

hola buenas tengo un serio problema y buneo la cuestion es que la funcion mime_content_type cuando es una imagen png no devuelve el mime images/png si no que devuelve text/plain osea eso no esta nada bien que puede estar pasando con las jpg funciona correctamente..., bueno si no ahi solucion para ello diganme alguna otra solucion para valdiar una imagen leyendo el contenido de la misma osea no basta con validar el formato si no meterme dentro de la imagen y comprobar que realmente es una imagen y no la an rescrito con codigo php para que al suvirse se modifique a php y tengan el control del cotarro :d.

saludos :d. y gracias de antemano :d.
  #2 (permalink)  
Antiguo 07/01/2009, 19:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Hola ddanime,

Usa getimagesize() con esa puedes ver el tipo de imagen. Por otro lado no te fies de los mime types estos te los informa directo el explorador y pueden falsificarse.

Saludos
  #3 (permalink)  
Antiguo 08/01/2009, 12:01
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
Respuesta: mime type

hola gracias por responder pero creo que con la funcion que me dices ya la utilizo es mas utilizo funciones mas fiables para sacar el formato la cuestion es que no importa que una imagen sea en verdad una imagen si no lo que importa es saver si esa imagen se a modificado en su interior incluyendo codigo php que al ejecutarse cambia la imagen a php y ya tienes un archivo de ataque en un servidor nose si me explico la unica manera de poder hacer esta validacion e scomprobando el contenido de la imagen y ver si lleva variables en fin comprobar que no tenga codigo metido y asi poder desvalidarla.

saludos y gracias por responder aver si alguienmas puede ayudar.
  #4 (permalink)  
Antiguo 08/01/2009, 12:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Mmmm no entiendo, aunque pusieran codigo PHP en medio de la imagen porque seria un problema?, recuerda que PHP se ejecuta en el servidor y no por estar en una imagen van a ejecutar codigo.

La función getimagesize() en una de las llaves te regresa el tipo de imagen que es y te sirve para validar perfectamente.

Saludos
  #5 (permalink)  
Antiguo 08/01/2009, 13:00
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
Respuesta: mime type

jeej por eso mismo una imagen esta en el servidor y si el codigo php que lleva esa imagen hace que al ejecutarse la imagen se convierta a php ya tienes un ejecutable de php y con ello puedes destruir lo que quieras con un simple unset o como se llame la funcion de eliminar archivos y directorios, asi podria borrar toda existencia abida y por aver ademas de poder crear nuevas carpetas archivos etc.

por eso es tan importante controlar el contenido que lelva la imagen en su interior para prevenir esos casos en el que algun listillo quiera miter codigo php en la cabecera de una imagen y asi poder hackear una pagina.

aver si alguein me echa un cable para pdoer sacar la informacion de dentro de una imagen y asi poder comprobar y limpiar la imagen para que sea benigna jejej :d

saludos
  #6 (permalink)  
Antiguo 08/01/2009, 13:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Mmm quisiera ver que pasara eso, no se si te haz fijado pero la unica forma de "ejecutar" (que realmente es leer y poner) es via un tag <img>, y creeme eso no ejecuta PHP ya que PHP no esta configurado para parsear archivos .png, solo .php.

Saludos.
  #7 (permalink)  
Antiguo 08/01/2009, 13:18
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
Respuesta: mime type

hola gracias por tus respeustas son aliviadoras pero creeme es muy posible hacer l oqeu te digo yo mismo lo e echo y e cambiado la forma de una imagen es totalmente posible osea tu al ejecutar la imagen simplemente viednola el codigo interno que tiene la imagen que lo tienen todas pues en ves de ser el codigo de uan imagen es codigo php que al ejecutarse la imagen coje y cambia la imagen por .php :d entonces la cuestion es cojer esa imagen leer su interior y si se ven codigos como php o cosas asi variables cualquier cosa de php que la imagen no se llegue a suvir nunca .

saludos :d.
  #8 (permalink)  
Antiguo 08/01/2009, 17:39
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: mime type

ddanime:
La mayoria de usuarios como mi persona pasamos el tiempo diseñando o creando cosas constructivas y NO destructivas.
Si demuestras como es que haces para incluir codigo php dentro de una imagen, pues muestra el codigo y facilmente te podria dar sugerencias de como evitar que ese codigo te haga daño.
O mas bien seria sencillo trabajar a la inversa.
Saludos
Y quedo a la espera de tu demostracion.
Franco
  #9 (permalink)  
Antiguo 08/01/2009, 18:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: mime type

ddanime, a reserva de tu demostracion, una imagen no es ejecutable y la unica forma en que podrias ejecutar codigo php es como te dijo GatorV, configurando cada extension de archivo para que sea interpretado por PHP.

Supongamos que haces un codigo PHP y guardas el archivo como codigo.jpg, lo subes a un servidor por medio de un formulario con pesima validacion y despues tratas de abrirlo: http://servidor/imagenes/codigo.jpg, lo unico que vas a obtener es un mensaje de error en el navegador porque no puede interpretar la imagen o el simbolo de imagen no encontrada.

Ahora, suponiendo que el intento de "inyeccion PHP" sea al momento de subir el archivo, PHP no ejecuta codigo a menos que tu lo especifiques, como ejemplo:

include 'codigo.php' -> esta instruccion si ejecuta el codigo
file_get_contents('codigo.php') -> esta instruccion lee sin ejecutar el mismo codigo

La funcion getimagesize() simplemente analiza el archivo (imagen o no) y te devuelve sus caracteristicas o cero para ancho y alto de la imagen si es que el archivo no corresponde a una imagen.

Mas info en: manual de getimagesize()
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 09/01/2009, 07:55
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
Respuesta: mime type

bueno lejos de creerme veo que no me creis ni una sola palabra bueno yo os digo lo que pasa si no quereis creerme eso ya es cosa de cada uno os digo que una imagen es perfectamente ejecutable y a la pregunta de como ago apra meter codigo php en una imagen pues amigo mio coge uneditor de textos y abre una imagen con el editor y veras como editar al imagen simplemente borra todo y listo.
a y leugo añade el codigo php necesario para montarte tu propio phpshell y tener acceso a lo que quieras con uans cuantas lineas de codigo puedes conseguir que la imagen se convierta a php claro que las imagenes se ejecutan si no ya me diras que es una imagen az la prueba y abre la imagen y veras la cantidad de codigo que ahi para observar la imagen tal y como la ves entonces, si ese codigo hace que muestra una imagen, un codigo que escrito en php o en el lenguage que sea, al ejecutarse la imagen se convierte a .php con el contenido que tu queiras y el nombre que tu quieras, bueno esto es un echo no hace falta que me digais que no se puede e comprobado y visto con mis propios ojos que si se puede es mas en este mismo foro ahi un user que se rie o el que no enteinde que se esta riendo ya l odigo yo de la validacion expuesta por foros del web en su blog que solo valida por extension y no mira contenido interno de la imagen para verificar que no tiene introducido codigo malicioso esta es una de las maneras en las que se hackea muchas paginas con subida de imagen pero bueno sigo esperando a alguein que me diga como puedo leer el contenido interno de una imagen con que funcion puedo ahcer eso ya que e probado varias pero una lo que hace es imprimir directamente el contenido de la misma y solo quiero que se guarde en al variable para luego hacer mis validaciones :D.

espero a los que decis que es imposible os sirva de ayuda y protejais mas vuestros uploads de imagenes y si no buscar en SAN GOOGLE Y VEREIS :D.

saludos de todos modos gracias por las respuestas.
  #11 (permalink)  
Antiguo 09/01/2009, 11:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Perdon si sueno muy duro, pero esque es imposible que pase eso, la razon es sencilla, y por lo que veo no conoces mucho del ambiente web.

PHP es un lenguaje que se ejecuta en el servidor, procesa requests y regresa un resultado. Las imagenes como sabes se ejecutan en el cliente, no en el servidor, por lo que si tu pones codigo PHP embedido en la imagen, no va a pasar nada ya que la imagen se va a tratar de desplegar en el cliente y se mostrara seguramente una cruz roja indicando problemas al decodificarla.

La unica y repito la UNICA forma de que se ejecutara esa imagen y el codigo PHP (y ademas te daria error pero bueno...) es usando include("imagen_con_codigo.png"); Pero no veo la razon para hacerlo, ya que si seria un riesgo...

La otra forma de ejecutar es llamando a eval() pero porque lo harias sobre una imagen .

En resumen, por mas que pongas codigo dentro de la imagen, a lo mucho si llega a pasar algo es a nivel en el cliente si el browser es vulnerable (busca en Google como hicieron el exploit del iPhone para instalar el Installer, era un overflow en una imagen PNG).

A nivel del server no pasa nada, a menos que tu lo causes.

Saludos
  #12 (permalink)  
Antiguo 09/01/2009, 12:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: mime type

San Google dice que se puede incrustar codigo PHP en la seccion de comentarios de una imagen (mencionan solo gif en los diferentes sitios que revise) y este archivo puede pasar como imagen valida en getimagesize.

La unica forma de ejecutar ese codigo incrustado es que el archivo tenga extension .php, entonces el problema no es realmente de PHP o de las imagenes, sino de la mala validacion al subir archivos.

Practicas para evitar ese tipo de "exploit":
1- Verifica la extension del archivo
2- Verifica el tipo mime
3- Si la extension no correponde al tipo mime, renombra el archivo al moverlo y ponle la extension correcta, de esta manera no se ejecutara el codigo incrustado, a menos que tengas configurado PHP para interpretar esa extension como codigo
4- Nunca hagas include() a una imagen que pueda tener codigo malicioso

La mayor parte de estos exploits (sin la extension .php) se ha presentado en software open source con formularios mal validados y, ademas, el hacker debe tener acceso a la seccion administrativa para poder "ejecutar" la imagen.gif, supongo que modificando archivos criticos del sistema, donde puedan agregar la instruccion include()
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 09/01/2009, 13:09
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: mime type

ddanime:
Creo que este comentario de manuel Lemus de phpclasses.org, puede
esclarecer y ayudar a saber mas sobre el tema tratado.
Personalmente, creo que estas diciendo una verdad y no lo he dudado.
A Continuacion la explicacion detallada ->
Cita:
I usually do not write in this blog about general PHP issues unless it is somehow related with the PHPClasses site.

However, this time I feel that I should use the fact that new blog posts here gets great exposure, as they are notified by e-mail to over 220,000 PHP developers. So I am writing this because it is very important to spread the word about this PHP security exploits that can used to abuse from sites written by many developers that are not well aware of security issues.

Despite in the PHPClasses site there is a great concern about security, I am not really a security expert. More than anything, I am just passing the word.


- The PHP GIF security issue

The problem that was discovered is that you can insert PHP code in the middle of a GIF image. That would not be a problem if it was not for the insecure ways some developers use to serve images upload by their users.

Usually, uploaded files are moved to a given directory. If the site then serves the images directly from that directory and preserve the original file name, the site may be open for security exploits.

For instance, lets say the attacker uploads an image named image.gif.php . The image may be moved to the images directory. If the the Web server is configured as usual to process requests with files .php extension, and the site serves the image with the following URL, the request will execute the PHP code inside the image.

http://www.yoursite.com/images/image.gif.php


- Avoiding the problem

The basic solution to avoid this problem is to either serve images only with actual extensions of image files (.gif, .png, .jpeg), or protect the upload directory to avoid direct requests to where the images are located.

Depending on your PHP setup, it may or may not be easy to protect your uploaded images directory. In Apache it can be done using a .htaccess file with lines like this:

<Files images>
deny from all
</Files>

Alternatively you can use other PHP functions to serve image files as images, and so, avoid triggering the execution of PHP scripts embedded in image files like these readfile.

http://www.php.net/readfile

$file = 'image.gif.php';

Header('Content-Type: image/gif');

readfile('images/'.basename($file));


Note the use of basename function to avoid injection of malicious paths. This way, only files from inside the images directory will be served, even if the original file named was forged to steal server sensitive files like /etc/passwd .


- Other things you should not do

Usually the getimagesize function is used to verify whether the uploaded file is a valid image.

In this case it would not work because the image can still be valid and have a sequence of bytes that can be interpreted as PHP. It is not wrong to use the getimagesize function. Just be aware that it does not avoid the problem.

Another thing that I have seen people doing is to use the include or require functions to serve images stored on the server this. Obviously, this will trigger the execution of PHP code embedded in the image file.

Checking the file name extension before accepting the upload files would not avoid the security hole opened by using include or require to serve the image file on the server side directory. Always use readfile or equivalent to serve the images.
Pare visitar este enlace ->

http://www.phpclasses.org/blog/post/...IF-images.html

Saludos
Y espero nos ayude a esclarecer este tema interesante.
Franco
  #14 (permalink)  
Antiguo 09/01/2009, 13:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Es en si lo que dije, a menos que uses un include() o que valides mal la imagen esta se va a ejecutar, por lo que regreso al punto de que depende justo del programador esa validacion.

Lo mejor a mi parecer es hacer lo que dice, tener el directorio de upload fuera del arbol de WebRoot y pasarlas por un proxy en PHP para desplegarlas.

Saludos
  #15 (permalink)  
Antiguo 10/01/2009, 10:19
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 0
Respuesta: mime type

pues eso es lo qeu yo qeria saver es claramente posible porcierto gracias por tu respeusta franco lo que pasa que no entiendo nada de ingles y traducirlo no creo que quede muy bienl a traduccion jeej pero bueno mas o menos entendi.

porcierto gatorV a que te refieres con "validacion mal"... yo cuando valido las imagenes compruebo la extension del archivo con $_FILES['imagenes']['type'] ya que e visto que ahi gente que lo comprueba con el nombre del archivo y eso es un erro ya que puede ir modificado, bueno dime que mas ahi que validar en una imagen opara tener una validacion buena ;d.

saludos y gracias.

$_FILES['imagenes']['type']
  #16 (permalink)  
Antiguo 10/01/2009, 14:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: mime type

Pues como dice el articulo, lo mejor que puedes hacer es mover las imagnes que suban a un directorio fuera del webroot, y usar un proxy para mostrarlas posteriormente.

Con eso mas una buena validacion usando $_FILES['imagenes']['type'], getimagesize() y leyendo la extension, creo es la forma más segura con la que puedes evitar un exploit de este tipo.

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 09:13.