Estoy trabajando en un sistema PHP donde el usuario puede cargar archivos.
Estoy tratando de proteger el sistema de códigos maliciosos, por lo que estoy pensando en algún tipo de lista negra de archivos que debo bloquear de la carga.
Sé que una lista blanca es mejor que una lista negra y este es mi enfoque común, pero en este caso Necesito hacer una lista negra de archivos por muchas razones (fuera de mi control), pero sigo buscando seguridad (si es posible).
Este es mi script actual (estoy revisando el tipo MIME para obtener el tipo de archivo):
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$check= finfo_file($finfo,$file["tmp_name"]);
finfo_close($finfo);
$dangerMime = array('application/x-bsh', 'application/x-sh', 'application/x-shar', 'text/x-script.sh');
if (in_array($check, $dangerMime)) {
//block upload
}
else {
//allow upload
}
La lista actual de tipos MIME a bloquear es:
- 'application / x-bsh', 'application / x-sh', 'application / x-shar', 'text / x-script.sh'
Estoy intentando bloquear cualquier archivo .sh
, ya que el sistema se está ejecutando en un CentOS bajo Apache. ¿Hay algún otro tipo de archivo que también deba bloquear?
A continuación hay información importante:
El servidor es un CentOS 7.2 con Apache 2.4.6. Los siguientes son los permisos del directorio de subidas:
drwxr-xr-x 4 apache apache 4096 Jan 8 12:23 uploads
Nota: En este proyecto, estoy actuando como desarrollador, por lo que no puedo cambiar los permisos de archivo.