Sé que nunca puedes estar seguro de haber hecho lo suficiente para estar seguro, y también sé que es difícil corregir correctamente la carga de archivos. Antes de hacer esta pregunta, leí algunas de las publicaciones relacionadas aquí como riesgo de carga de imagen por php , ¿qué pasos se deben tomar para validar ... y riesgos de seguridad de la carga .
Pienso que he hecho todo lo que se necesita, pero estaría muy agradecido si alguien pudiera echar un vistazo a lo que tengo y decir si he hecho lo suficiente. Así que estoy ejecutando el último PHP 5.5.9-1+sury.org~saucy+1
en Apache/2.4.7
. Y mi método de carga es el siguiente:
public static function uploadTemp($number, $file){
//check if the filename exist and upload was without an error
if (!$file['name'] || $file['error']){
return false;
}
// check if extension is valid
if (!Helper::validExtension($file['name'])){
return false;
}
// check is the size of file is valid
if ($file['size'] > (1024 * 1024 * 6) || $file['size'] < 1024 * 10){
return false;
}
// no need to upload images less than 50x50. Also $file['size'] can be spoofed
$imageSize = getimagesize($file['tmp_name']);
if ($imageSize === false || $imageSize[0] < 50 || $imageSize[1] < 50){
return false;
}
require_once('SimpleImage.php');
$image = new SimpleImage();
$image->load($file['tmp_name']);
// saving a file to a temporary directory and renaming it.
$image->save(Image::$tempDir.$number.'.jpg');
return true;
}
SimpleImage es una herramienta de código abierto para manipular una imagen , dentro de una herramienta que cambié solo una cosa (función guardar para guardar todos los archivos con 644 permisos). Mi $number
es una cadena que es una concatenación de un número aleatorio y una marca de tiempo actual, $file = $_FILES['fileToUpload']
y validExtension se ve de la siguiente manera:
public static function validExtension($filename){
$extensions = array('jpg', 'jpeg', 'png');
$arr = explode('.', $filename);
if ( in_array(strtolower(end($arr)), $extensions) ){
return true;
} else return false;
}
Mi carpeta temporal tiene permisos 755 .
Entonces, mi pregunta es: ¿me estoy perdiendo algo aquí o cómo puedo mejorarlo?
- puede restringir permisos adicionales (no necesito hacer nada con las imágenes, excepto para que el cliente las vea. La carpeta se usa solo para cargar imágenes)
- puede estar cambiando algunos parámetros en php.ini o apache