Público por defecto, en todos los sistemas
Una biblioteca de medios es una carpeta en un servidor web. Subir un archivo es publicarlo. Eso vale para WordPress, para Drupal y para un sitio estático por igual; la diferencia es solo lo fácil que resulta encontrar el listado.
En WordPress, el listado está a una dirección de distancia. La API REST en /wp-json/wp/v2/media devuelve cada archivo de la biblioteca a cualquiera que lo pida, sin iniciar sesión. La JSON:API de Drupal hace el equivalente. Es así por diseño: la misma API alimenta el editor de bloques, las galerías, las aplicaciones móviles y las integraciones que su equipo ya usa.
De dónde viene la sorpresa
La gente trata la biblioteca como si fuera Dropbox: una carpeta privada donde dejar un archivo para obtener un enlace. Así se llena de archivos que nadie quiso publicar. El borrador tres de un documento cuyo borrador cuatro es el que está en la página. Un dosier de la junta subido para que una persona pudiera descargarlo. Un informe programado para la semana que viene, subido hoy.
Se confunden dos hechos. Un archivo al que ninguna página enlaza está sin enlazar, no es privado. Un archivo difícil de encontrar está escondido, no es privado. La API lista ambos, y un buscador que encuentre la dirección indexará ambos.
Por qué apagar la API es la solución equivocada
La respuesta tentadora es desactivar la API REST, o esconder el punto de acceso de medios. Eso es seguridad por oscuridad: detiene una forma de listar archivos mientras cada dirección directa sigue funcionando, y rompe las funciones del editor y las integraciones que dependen de la API.
La pregunta que hay que responder es qué archivos de la biblioteca deben ser públicos. Una vez que lo decida archivo por archivo, el listado de la API deja de ser un problema.
Cómo manejarlo en WordPress
Primero, mire. Abra /wp-json/wp/v2/media?media_type=application en su propio sitio y lea lo que devuelve. Cualquier persona en internet puede ver esa misma lista.
Segundo, decida archivo por archivo. Los archivos públicos se quedan. Los borradores superados y todo lo que nunca debió publicarse se borran; una versión publicada por documento. Los archivos que tienen que existir pero no deben ser localizables se marcan como privados.
Tercero, márquelos. Escribimos un plugin pequeño exactamente para esto, LFW Private Media: una casilla Privado en cada adjunto, más acciones en lote en la lista de Medios. Un archivo privado desaparece de la API pública, de la búsqueda del sitio, de las páginas de adjuntos y de los sitemaps, mientras sus editores siguen viéndolo todo. Descárguelo en LFW.com/dl/lfw-private-media.zip. Si prefiere ver el mecanismo antes que instalar nada, la idea completa cabe en un archivo pequeño:
Ver el código Ocultar el código PHP, 27 líneas
<?php
/**
* Plugin Name: Private media (minimal)
* Keeps attachments carrying the meta key _lfw_private out of the public REST API.
* Editors (anyone who can upload files) still see them.
*/
// The collection: /wp-json/wp/v2/media
add_filter( 'rest_attachment_query', function ( $args ) {
if ( current_user_can( 'upload_files' ) ) { return $args; }
$args['meta_query'] = isset( $args['meta_query'] ) ? $args['meta_query'] : array();
$args['meta_query'][] = array( 'key' => '_lfw_private', 'compare' => 'NOT EXISTS' );
return $args;
} );
// A single item: /wp-json/wp/v2/media/123
add_filter( 'rest_request_before_callbacks', function ( $response, $handler, $request ) {
if ( current_user_can( 'upload_files' ) ) { return $response; }
if ( preg_match( '#^/wp/v2/media/(\d+)$#', $request->get_route(), $m )
&& '1' === get_post_meta( (int) $m[1], '_lfw_private', true ) ) {
return new WP_Error( 'rest_post_invalid_id', 'Invalid post ID.', array( 'status' => 404 ) );
}
return $response;
}, 10, 3 );
// Mark a file private: add the meta key _lfw_private with the value 1.
// With WP-CLI: wp post meta update <attachment-id> _lfw_private 1Hay un límite que vale tanto para el plugin como para el fragmento de código. Un archivo que ya es público en una dirección directa sigue siendo accesible para quien tenga esa dirección. Marcarlo como privado impide que los desconocidos lo descubran. No pone el archivo detrás de un inicio de sesión. Lo realmente confidencial no debe ir en la carpeta de subidas. Póngalo detrás de una descarga con control de acceso.
Si es cliente
No necesita instalar nada. Abra una solicitud en su portal y auditaremos la biblioteca con usted, borraremos lo que deba irse, marcaremos como privado lo que deba quedarse e instalaremos el plugin. Es una tarea pequeña dentro de la iguala, no un proyecto aparte.
Si todavía no es cliente, la auditoría gratuita le dirá cuántos archivos lista hoy su sitio a cualquiera que lo pida. Al ver esa cifra, la mayoría deja de tratar la biblioteca como si fuera Dropbox.
Reciba el LFW Weekly Recap
Un boletín que se envía cada viernes con la semana en LFW. Un correo a la semana y ningún otro artículo del blog.
Primero enviamos un correo de confirmación. No llega nada más hasta que haga clic en él.
Revise su bandeja de entrada
Un enlace de confirmación va en camino a . Haga clic en él para empezar a recibir el resumen semanal. Si no llega a su bandeja de entrada en unos minutos, revise la carpeta de spam y márquelo como No es spam.