domingo, 21 de julio de 2013

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

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

Posted: 21 Jul 2013 11:15 AM PDT

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 http://ayudawordpress.com/?p=73876&preview=true 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 http://tuweb.es/wp-content/uploads/2008/08/informe_finanzas_2013-08.pdf

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: http://ayudawordpress.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?

Eliminar palabras automáticamente de la URL

Posted: 20 Jul 2013 10:05 AM PDT

línea más corta de un punto a otro

El otro día, cuando vimos el truco para eliminar automáticamente palabras cortas de la URL surgió la duda razonable del problema que puede surgir este automatismo, pues no controlas realmente el resultado cuando el único elemento de control que pones es la cantidad de letras.

Con el anterior método podrías obtener resultados no deseados, y además es poco flexible.

Así que se hacía obligatorio encontrar un código que ofreciera lo mismo: acortar la URL eliminando palabras innecesarias, pero controlando que se elimina.

Y creo que lo mejor es hacer una lista de palabras a eliminar de la URL, que tu mismo elijas, donde incorporarás artículos, pronombres y demás elementos innecesarios para una URL, o las palabras que tu quieras.

Para conseguirlo hay que añadir este código a tu plugin de funciones o archivo functions.php del tema activo:

//Lista de palabras a borrar de la url  add_filter('sanitize_title', 'remove_false_words');  function remove_false_words($slug) {      if (!is_admin()) return $slug;      $slug = explode('-', $slug);      foreach ($slug as $k => $word) {                  //palabras a borrar separadas por comas                  $keys_false = 'un,una,el,la,lo,de,desde,en,entre,para,por,ya,también,etc';                  $keys = explode(',', $keys_false);                  foreach ($keys as $l => $wordfalse) {                          if ($word==$wordfalse) {                                  unset($slug[$k]);                          }                  }      }      return implode('-', $slug);  }

El único cambio a realizar en el código es sustituir la lista de palabras de ejemplo por las tuyas.

Una vez guardes el código en cada nueva entrada, o actualización de existentes, se borrarán automáticamente las palabras de la lista en la URL de la entrada.

Lo mejor de este método, frente al anterior, es que puedes borrar palabras de una, tres o las letras que quieras, pero controlando qué quitas y qué no.

¿Qué tampoco te gusta?, pues nada, las acortas manualmente.

No hay comentarios:

Publicar un comentario

Seguidores

Archivo del blog