Logo WordPress

Permitir o denegar subidas de archivos en WordPress según su extensión

publicado en: Aplicaciones Web, Lenguajes, PHP, WordPress | 0
 
 

Con la configuración por defecto de WordPress, podemos subir a nuestro sitio, archivos de imágenes, audio, vídeo, documentos PDF, de Word, de OpenOffice y más extensiones.

Para mejorar la seguridad y evitar que se suban al servidor archivos potencialmente peligrosos, además de las restricciones de WordPress, puede haber también limitaciones impuestas por el proveedor de alojamiento, como por ejemplo no permitir ciertas extensiones, o que esté limitado el tamaño de los archivos que podemos subir.

Archivos permitidos en WordPress
Si no hemos hecho ninguna modificación, esta es la lista de extensiones de archivos más utilizados que acepta WordPress:

  • Imágenes: jpg, jpeg, gif, png, bmp, tiff, psd
  • Documentos: txt, csv, ics, rtx, css, js, html, pdf, doc, docx, pps, ppt, xls, xlsx, pptx, odt, numbers, pages
  • Audio: mp3, m4a, wav, ogg, midi
  • Video: wmv, avi, divx, flv, mov, mpeg, mp4, ogv, mkv, 3gp
  • Archivos comprimidos: tar, zip, gzip, rar, 7z

Cuando el usuario intenta subir un tipo de archivo que no está en esta lista, le aparece un mensaje de error: “Ha habido un error al subir “NombreDelArchivo”. Perdona, por razones de seguridad, este tipo de archivos no está permitido.”

Para evitar o conseguir que aparezca este error, podemos ampliar, limitar o sustituir esta lista según nuestras necesidades.

Cómo añadir tipos de archivo a la lista de extensiones permitidas
Si queremos permitir que WordPress accepte algún tipo de archivo que no esté en su lista, podemos agregar nuevas extensiones, conservando la lista original. Para ello se utiliza el filtro upload_mimes. La función a utilizar sería la siguiente:

/* Función para agregar extensiones de archivos permitidas en los uploads
 * al sitio
 */
function agregar_extensiones ( $existing_mimes=array() ) {
	// Añade la extensión y el tipo mime que le corresponda
	$existing_mimes['gpx'] = 'application/gpx+xml';
	$existing_mimes['gdb'] = 'application/gdb+xml';
	$existing_mimes['kmz'] = 'application/vnd.google-earth.kmz';
	$existing_mimes['kml'] = 'application/vnd.google-earth.kml+xml';
	$existing_mimes['bz|bzip'] = 'application/x-bzip ';
	$existing_mimes['map'] = 'application/x-navimap';
 
	return $existing_mimes;
}
add_filter('upload_mimes', 'agregar_extensiones');

En el ejemplo anterior incluimos a la lista de archivos permitidos las siguientes extensiones: .gpx, .gdb, .kml, .kmz, .map (datos cartográficos) y .bz, .bzip (archivos comprimidos).

El filtro upload_mimes se utiliza para modificar la lista de extensiones de archivos permitidos.
El primer parámetro de add_filter es el nombre del filtro upload_mimes y el segundo, el nombre de la función (agregar_extensiones) que se encarga de alterar la lista.

Para poder incluir nuevos archivos es necesario conocer el tipo de MIME (Internet Media Type) de cada formato, es decir, el identificador que nos dice el tipo de datos que contiene el archivo (por ejemplo: application/vnd.google-earth.kmz, image/jpeg, application/pdf, etc). Aquí encontrarás una lista muy completa de tipos de archivos.

NOTA: Esta función habrá que incluirla en el archivo de funciones del tema activo functions.php.

Cómo eliminar tipos de archivo de la lista de extensiones permitidas
Si por el contrario lo que queremos es limitar la lista de archivos permitidos, es decir, que el usuario no pueda subir un tipo de archivo determinado (por ejemplo, archivos ejecutables) utilizaríamos el mismo filtro upload_mimes. La función a utilizar sería la siguiente:

/* Función para agregar extensiones de archivos denegadas en los uploads
 * al sitio
 */
add_filter('upload_mimes', 'quitar_extensiones');
function quitar_extensiones ( $existing_mimes=array() ) {
	// Elimina la extensión del array así
	unset($mime_types['exe']);
	unset($mime_types['com']);
 
	return $existing_mimes;
}

En este caso hemos eliminado la posibilidad de subir archivos ejecutables EXE y COM.

NOTA: Esta función habrá que incluirla en el archivo de funciones del tema activo functions.php.

Sustituir la lista original de extensiones permitidas
Si sólo queremos permitir algunos tipos de archivo determinados, por ejemplo imágenes y documentos PDF, eliminando todos los demás, crearemos una nueva lista de extensiones permitidas, sustituyendo así la que WordPress trae por defecto, así no tenemos que eliminar las extensiones una a una. En este caso, la función quedaría así:

/* Función para crear lista de extensiones de archivos permitidas en los uploads
 * al sitio
 */
function lista_tipos_mime( $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', 'lista_tipos_mime' );

A diferencia de los ejemplos anteriores, esta función no añade ni elimina extensiones individualmente, sinó que crea una lista nueva de extensiones permitidas (sólo JPG, JPEG, JPE, GIF, PNG y PDF). Si el usuario intenta subir cualquier otro tipo de archivo, le aparecerá el mensaje de error “Ha habido un error al subir…”.

NOTA: Esta función habrá que incluirla en el archivo de funciones del tema activo functions.php.

NOTA: No olvidar hacer copia del archivo functions.php. Cuando WordPress actualiza los temas, sustituye el archivo functions.php existente por uno nuevo, perdiéndose los cambios realizados.
Para evitar perder los cambios realizados en nuestro archivo functions.php, se aconseja utilizar Temas hijo. En el artículo Cómo crear un tema hijo en WordPress, publicado en </ZeppelinuX>, te enseñamos como hacerlo.

NOTA: El uso de estas funciones no afecta a la gestión de archivos a través de FTP, sólo a los que se suben desde el gestor de contenidos de WordPress.
 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.