Estoy implementando una herramienta de carga de imágenes basada en el usuario para mi sitio web. El sistema debería permitir que cualquier usuario cargue archivos JPEG y PNG solamente. Estoy, por supuesto, preocupado por la seguridad y me pregunto cómo las personas más inteligentes que yo sienten sobre las siguientes comprobaciones para permitir las cargas:Capacidades de carga de imágenes seguras en PHP
1) Primero, enumere las extensiones de archivo permitidas en PHP para permitir solo PNG, png, jpg, JPG y JPEG. Recuperar la extensión de archivo del usuario a través de una función como:
return end(explode(".", $filename));
Esto debería ayudar a no permitir al usuario la posibilidad de subir algo malicioso como .png.php. Si esto pasa, vaya al paso 2.
2) Ejecute la función php getimageize() en el archivo TMP. A través de algo como:
getimagesize($_FILES['userfile']['tmp_name']);
Si esto no devuelve falso, proceda.
3) Asegurar un archivo .htaccess se coloca en el directorio de archivos de modo que los archivos dentro de este directorio no puede analizar archivos PHP:
php_admin_value engine Off
4) Cambiar el nombre de archivo del usuario para algo pre-determinado. ES DECIR.
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
Esto también ayudará a evitar la inyección SQL como el nombre del archivo será la única variable determinada por el usuario en cualquier consulta utilizados.
Si realizo lo anterior, ¿qué tan vulnerable para el ataque todavía estoy? Antes de aceptar un archivo, debería tener 1) solo permitía jpgs y pngs, 2) Verificó que PHP dice que es una imagen válida, 3) deshabilitó el directorio de las imágenes desde la ejecución de los archivos .php y 4) renombró el archivo de los usuarios a algo único.
Gracias,
Podría utilizar strip_tags en un archivo de imagen para eliminar etiquetas PHP? –