Desarrollo un script php para reemplazar uno actual, que tendrá una gran exposición a varios mercados/países. Este script entre otros ofrece una funcionalidad de carga de fotos.Acercamiento de seguridad de carga de imagen PHP
Después de leer mucho sobre el tema, seguí el enfoque que se describe a continuación. Agradecería mucho sus comentarios sobre su seguridad.
- La foto se carga en una carpeta privada 777 fuera de la raíz web.
- Se realiza una comprobación de las extensiones en la lista blanca (solo permite jpgs, gifs, pngs) se elimina todo lo demás.
- Uso de getimagesize para verificar las dimensiones min-max y la validez de la foto.
- Comprobación del tipo de letra mimet y la extensión de la extensión de archivo.
- Cambio de tamaño de la foto cargada a las dimensiones estándar (utilizando imagecopyresampleado).
- Guardando los archivos creados como jpg.
- Eliminación del archivo original.
- Guarde las fotos con una nueva (nombre no aleatorio) es decir img51244.jpg.
- Mueva las nuevas fotos a los subdirectorios variables de una carpeta pública (777 permisos) según un algoritmo no predecible. Es decir,
img10000.jpg
se almacenará enphotos/a/f/0/img10000.jpg
, mientras queimg10001.jpg
se almacenará enphotos/0/9/3/img10001.jpg
. Esto se hace por otros motivos (uso de subdominios para el servicio de contenido estático o el uso de un CDN).
La secuencia de comandos se ejecutará en un servidor dedicado de Linux.
nada salta a la vista aquí. aparte del permiso 777 en la carpeta, tal como lo entiendo, si tiene 777 permisos, no es privado. pero por lo que puedo decir, esto realmente solo importaría si su servidor se viera comprometido (lo cual no me parece probable a través de este script al menos) – jammypeach
777 no suena seguro. Posible relacionado con http://stackoverflow.com/questions/3644138/secure-user-image-upload-capabilities-in-php – ajreal
Me parece muy bueno, excepto tal vez por permisos muy liberales. Tal vez se pueden limitar de alguna manera? De lo contrario, esto hace todo lo que puedo pensar, incluida la eliminación de datos EXIF –