Según lo sugerido en mi pregunta StackOverflow , ahora dirijo esto hacia el grupo de Seguridad de la Información, ya que nadie pudo responder mi pregunta a pesar de los múltiples votos ascendentes.
Las imágenes subidas por el usuario representan una gran parte del contenido del sitio en el que estoy trabajando. Intenté almacenarlos fuera de webroot y buscarlos con readfile()
por razones de seguridad, pero fue demasiado lento, así que tuve que volver al método anterior.
Ahora estoy buscando asegurarme de que todas las subidas estén saneadas al 100% ya que se almacenarán dentro de webroot. Mi pregunta es, si un usuario cambiara el nombre de un script dañino a .jpg, .gif, .png o .bmp y lo subiera, ¿seguiría siendo dañino cuando se ejecutara o buscara si la imagen se recreaba con una función como esta? :
function imageCreateFromAny($filepath) {
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1, // [] gif
2, // [] jpg
3, // [] png
6 // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :
$im = imageCreateFromGif($filepath);
break;
case 2 :
$im = imageCreateFromJpeg($filepath);
break;
case 3 :
$im = imageCreateFromPng($filepath);
break;
case 6 :
$im = imageCreateFromBmp($filepath);
break;
}
return $im;
}
En otras palabras, ¿existe alguna forma de engañar a una de las funciones imagecreatefrom*
para que ejecute el contenido como un script en lugar de una imagen o incluso un script dañino que se haya ejecutado se reduciría a una imagen rota?
Actualizar También verificaré los tipos de archivos y las extensiones, pero quería saber si el usuario logró omitirlos, este último recurso ayudaría a proteger a mi servidor y / o clientes de alguna manera. Gracias.