Hace unos meses publiqué unos tutoriales para crear formularios externos para colaboradores externos. En uno de ellos se hablaba de cómo permitir a un usuario colaborador subir archivos a WordPress, para por ejemplo, agregar imágenes a sus artículos.

Me han comentado la preocupación de que estos usuarios colaboradores puedan subir archivos malintencionados aprovechando sus permisos de subida de archivos a WordPress.

Especificar únicamente los archivos permitidos

Para asegurarnos, podemos limitar el tipo de archivos permitidos para subir a WordPress utilizando la función:

function restringir_tipos_de_archivo($mime_types){
    $mime_types = array(
        'jpg|jpeg|jpe' => 'image/jpeg',
        'gif' => 'image/gif',
        'png' => 'image/png',
        'pdf' => 'application/pdf'
    );
    return $mime_types;
}
add_filter('upload_mimes', 'restringir_tipos_de_archivo');

Esta función sobreescribe los archivos permitidos por defecto de WordPress por nuestra lista, donde podemos añadir los tipos extra que necesitemos (por ejemplo archivos de video .avi, .mpeg, .webm…).

Bloquear tipos de archivo específicos

Si solamente queremos bloquear ciertos tipos de archivos, podemos usar la función:

function eliminar_tipos_de_archivo( $mime_types=array()){
    unset( $mime_types['mov|qt'] ); // Vídeos con la extensión .mov
    unset( $mime_types['mp4|m4v'] ); // Vídeos con la extensión .mp4
    unset( $mime_types['avi'] ); // Vídeos con la extensión .avi
    unset( $mime_types['mpeg|mpg|mpe'] ); // Vídeos con la extensión .mpg
 
    return $mime_types;
}
add_filter('upload_mimes','eliminar_tipos_de_archivo');

Añadiendo en cada unset() el tipo de archivo a bloquear.

Una capa extra de seguridad que podemos añadir a nuestros proyectos con una pocas líneas de código.