Oferta SiteGround Black Friday

Peligro de pérdida de datos debido a error de WordPress

perdida datos empresa

Imagina la siguiente situación … 

Cada mes publicas los resultados financieros o de márketing de tu empresa, y para eso lanzas una entrada en el blog corporativo en el que muestras el PDF con todos los datos de la compañía del periodo en cuestión.

Pues bien, un visitante curioso o malintencionado podría adelantársete y disponer de esos datos antes de que tu quieras sacarlos a la luz.

¿Cómo?, pues en realidad es sencillo, y debido a un error de WordPress en la gestión de adjuntos.

Me explico … 

Cuando creas una entrada nueva, mientras no la publiques, puedes dejarla en borrador, pendiente de revisión o programada, y cualquier administrador o editor visualizarla previamente mediante la URL temporal o incluso la permanente, no así cualquier visitante o usuario sin los permisos adecuados, que obtendrá un error aunque conozca la URL.

Digamos, por ejemplo, que alguien vigila exhaustivamente tus publicaciones, pues aunque supiera los IDs de tus últimas entrada e hiciera pruebas al azar, al teclear algo cómo no tendría permisos suficientes para ver nada.

Pero no pasa lo mismo con los medios que hayas subido a WordPress, estén o no adjuntos a una entrada pues sus URLs son siempre accesibles.

De este modo, si siempre subes, digamos, los resultados financieros con una estructura de nombre de fichero similar, del tipo informe_finanzas_2013-08.pdf, tendría relativamente poco trabajo encontrarlo y visualizarlo si lo subiste antes de publicarlo, algo por lo demás bastante habitual, aunque solo sean horas.

perdidad informacion empresa

Solo tendría que adivinar la URL completa de carga del archivo, que si te sigue habitualmente no le costará adivinar, del tipo

Esto, en situaciones de mercado sensibles, puede ser un grave problema de cara a tus inversores o competidores. ¿Lo vas pillando?

Pero es aún más grave, pues de hecho es todavía más fácil adivinar la URL de un adjunto, pues no necesitarías siquiera saber la carpeta donde está alojado, ni siquiera el nombre de archivo, sino que solo necesitas «adivinar» el ID de adjunto, y eso es solo prueba y error.

Por ejemplo, el siguiente archivo no está asociado a ninguna entrada, o sea, no está publicado, pero sin embargo, y al contrario que con las entradas, si puedes verlo aunque no tengas permisos de usuario: https://ayudawp.com/?attachment_id=70246.

Creo que ya debes ir comprendiendo que si que es un fallo de seguridad en el modo en que WordPress gestiona la privacidad de los archivos adjuntos ¿lo ves?

Espero pronto se modifique la manera en que se gestionan las URLs de los adjuntos en WordPress, porque esto es un fallo tonto que, en según qué situaciones puede ser un agujero de seguridad que provoque pérdida de datos, en algunos casos importante. La solución podría pasar porque solo fueran accesibles los adjuntos cuando estén asociados a una entrada ya publicada, no antes, por ejemplo.

¿Soluciones?
datos seguros

Pues hay alguna. Por ejemplo, podrías subir manualmente la información sensible a una carpeta distinta de la habitual de WordPress y luego añadir una regla al fichero .htaccess para que ningún usuario no registrado pueda ver los archivos ahí subidos, pero es algo radical.

Por si te sirve este sería un ejemplo de .htaccess estándar con las líneas en cuestión (5, 6 y 7) protegiendo la carpeta «privados«, situada dentro de tu carpeta «uploads«, de manera que solo puedan ver los archivos los usuarios registrados:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*uploads/privados/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /wp-login.php?redirect_to=%{REQUEST_URI} [R,L]
RewriteRule . /index.php [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Pero ya te digo que es un apaño algo bestia y poco práctico.

Un modo menos radical y controlado de ofrecer ciertos adjuntos de un modo más racional sería utilizar un plugin que gestione descargas de archivos, cómo WP download manager, WP filebase o Easy digital downloads.

De este modo la información sensible solo la ofrecerás mediante descargas gestionadas con el plugin, pues además este tipo de plugins suelen ofrecer opciones para que ciertos archivos solo puedan ser descargados con contraseña o solo por usuarios registrados, lo que te ofrece más posibilidades.

Pero vaya, que son soluciones temporales a un problema existente. Si sabes de alguna solución más nos la cuentas ¿vale?

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 2

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

9 comentarios en “Peligro de pérdida de datos debido a error de WordPress”

  1. Leo esto y me siento un auténtico estúpido porque yo me di cuenta de esto hace mucho tiempo. Pensé se la URL exacta de un archivo pues Apache la sirve y punto. La verdad es que podría haberlo dicho pero ya hace tiempo y tenía mucha menos experiencia que ahora 😛

    Un saludo!

  2. Nunca he utilizado la opción de Wordpress de subir ficheros desde la entrada. Siempre he hecho carpetas de ficheros por categorias y cada carpeta el index.php vacio correspondiente, luego el fichero pues subir por ftp y enlace desde la entrada que sea.

  3. Hola Fernado,

    Referente a la protección en una página privada, por ejemplo en una intranet dónde quieres que los usuarios estén identificados para ver los attachments, como en el ejemplo que comentas. Se puede hacer lo siguiente, solo habría que poner esta función en el archivo functions.php (Cómo siempre 😀 ) :


    function proteger_attachment_usuarios_no_identificados() {
    if (is_attachment() && !is_user_logged_in()){
    wp_redirect( home_url() );
    exit;
    }
    }
    add_action('wp_head', 'proteger_attachment_usuarios_no_identificados');

    Y ya está. Cualquier usuario no identificado en la intranet, no podría acceder a la página de attachments.

    Por si alguien quisiera redirigir a una página en especial, por ejemplo una específica donde se advirtiera que solo es visible por usuarios identificados, se puede especificar en wp_redirect cualquier url.

    http://codex.wordpress.org/Function_Reference/wp_redirect

    Saludos

      1. De nada 🙂

        En la realidad, simplemente poniendo:


        !is_admin()

        en vez de:


        !is_user_logged_in()

        Ya solo el adminitrador del sitio podría ver la página de adjuntos. Eso si, los que que apunten sus imágenes a la página de adjuntos, nunca deberian utilizar este código, o nadie podría ver las imágenes a excepción de el/los adminsitrador/es del sitio.

  4. Estan muy buenos estos plugin sobre todo para el tema de estadisticas, y mas cosas easy digital downloads screenshots me imagino que habra una version premium, aunque con la version free ya nos sirve para mucho

Deja un comentario

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

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio