Ciber Geek >

Wordpress

Stackoverflow, mas allá del copy/paste

Seguramente, si alguna vez tuvieron algún problema mientras programaban, configuraban software o algo así, terminaron en Google, quien gentilmente los derivó a Stackoverflow. Aquí encontraron una pregunta con un gran numero de respuestas extensas, con explicaciones técnicas del funcionamiento de éso que buscaban, o sino, terminaron en una pregunta que aún no había sido contestada, o cuya respuesta no funcionaba. Ésta ultima es la razón por la que me registré en StackOverflow, había una respuesta, que había sido elegida como correcta y que, probablemente sin intención, estaba mal, o al menos incompleta.

logo de stackoverflow

El viaje comienza

Cuando me registro me doy cuenta de que no podía dejar un comentario al autor de la respuesta, porque necesitaba mas puntos, así que hice lo segundo que podía hacer, deje una respuesta contestándole al autor de la otra respuesta, obviamente, no pasó mucho tiempo hasta que un moderador me comunicó que no estaba siguiendo las reglas correctamente, que para eso no eran las respuestas, que use comentarios. Ok, pero no podía comentar, ésto es algo que me llamó la atención de Stackoverflow, se necesitan mas “porotos mágicos” para dejar un comentario que para escribir una respuesta, desde mi punto de vista no es muy lógico, pero desde el punto de vista de alguien que está intentando aumentar la participación de los usuarios en su sitio, tiene bastante sentido.

Finalmente, me puse a contestar todo lo que podía para llegar a ésos miseros 15 puntos, a los que finalmente llegué, pero para ése momento ya me había hecho adicto a sumar puntos, mientras tanto confirmaba  lo valiosa que es la documentación, y que debe ser leída con plena conciencia. Además, lo difícil que es leer el código de otra persona cuando no siguen ningún tipo de orden, ni siquiera estoy pidiendo un estándar, solo un poco de organización y algún comentario.

Una herramienta para aprender

Participar activamente en la comunidad tienen sus beneficios, es recomendable para aquellos que quieren aprender mas sobre un lenguaje o herramienta, a casi cualquier persona a la que le pregunten cual es la mejor manera de aprender a programar, les va a decir que es programando, llevando a cabo pequeños proyectos para utilizar su conocimiento y ponerlo en practica. Bueno, Stackoverflow es un sitio ideal para ésto, ya que van a aprender de problemas que ustedes no tuvieron, de errores ajenos, y de requerimientos muy variados, que los van a llevar a aprender algo nuevo sobre el lenguaje, framework o herramienta que les interesa.

Un modelo que vale la pena seguir

Si bien hay algunos cambios que se le pueden hacer, el modelo de puntuación de Stackoverflow con metas y placas (badges), es interesante para seguir en otras comunidades para fomentar la participación de los usuarios, por ejemplo en los foros de WordPress.org, donde por un buen tiempo me dedicaba a ayudar a aquellos que daban sus primeros pasos en Internet, pero que finalmente abandone, mas que nada por no tener una conexión a Internet consistente, gracias Claro.

 

Acceder a WordPress en una red local

Con la llegada del responsive design, y todos los nombres cool que tienen las paginas que se adaptan a diferentes tamaños de pantallas, es recurrente la necesidad de probar éstas paginas en diferentes dispositivos, para lo cual, entre varias técnicas, una de mis favoritas (?) es acceder al servidor en la PC en que estamos desarrollando mediante otros dispositivos, todos conectados a una red local. Ojo, ésto no funciona si están usando el 3G de su teléfono, tienen que estar en al misma red por cuestiones de simplicidad, o sea usar el WiFi, si se quieren poner a jugar con las configuraciones avanzadas de su router, bueno, pueden hacerlo.

wordpress logo

WordPress

Acceder a una instalación de WordPress en la red local

Antes de hacerlo deben configurar el servidor (para Apache), de modo que les quede así la directiva Listen.

Listen *:80

Ésto puede llegar a variar, pero él anterior es el caso mas común.

También deben fijarse de que el Firewall no les esté filtrando el acceso.

Y aquí, la magia, deben agregar lo siguiente al archivo wp-config.php.

define( ‘WP_SITEURL’, ‘http://’ . $_SERVER[‘HTTP_HOST’] . ‘/directorio_donde_esta_wordpress’ );
define(‘WP_HOME’, WP_SITEURL);

Es pura magia, traída a ustedes gracias a las constantes WP_SITEURL y WP_HOME. Antes de hacer ésto, si podían acceder a su blog/sitio de WordPress, varias cosas no iban a funcionar, como por ejemplo la hoja de estilos y demás, tengan en cuenta que es fundamental utilizar las funciones de WordPress para definir rutas, si están hardcodeadas o escritas a mano, ésto no va a funcionar.

Ésta modificación al archivo wp-config.php lo que hace es modificar el valor sin interferir con el valor que está guardado en la base de datos, así que después es solo cuestión de borrar éstas lineas de código y listo.

Protegiendo tus directorios en Apache, ideal para WordPress

Empecemos con un viejo y conocido refrán: “En casa de herrero, cuchillo de palo“. Dicho esto, seguimos con el post, y estén atentos, ya que esto los puede salvar de un aprieto, y es super sencillo, tan sencillo que hasta yo podría hacerlo.

Evitar el listado de directorios en Apache

Seguramente estén pensando ¿A mi para que me sirve esto? Y bueno, no hay mejor forma que ejemplificando, por ejemplo, existen plugins en WordPress que almacenan archivos en la carpeta “wp-content/uploads”, muchos de estos son plugins que hacen backups o permiten descargar listados de emails, así que con un poco de Google-fu pueden llegar a encontrar muchas cosas.

http://www.google.com/#q=%22Index+of+%2Fwp-content%2Fuploads%2Fbackupbuddy_backups%22+zip

Pero los backups son aburridos y no se pueden vender, mejor vamos por un listado de mails.

https://www.google.com/search?q=”Index%20of%20%2Fwp-content%2Fuploads%2Fwp-mailinglist”%20csv

E incluso hay cosas mas interesantes, por ejemplo, el otro día encontré un sitio que vende un plugin para ayudar con el marketing de WordPress a 65 dolares y lo tiene disponible para descargar gratis en la carpeta “uploads”. Les avisé hace mas de una semana y ni siquiera intentaron bajarlo, o al menos cambiar la configuración. Pero bueno, ahora vamos a lo importante, como evitarlo.

Hay 2 formas de evitarlo (en Apache):

  1. Una forma de hacerlo, mas “artesanal”, es poniendo un archivo con el nombre “index.html” (sin comillas) en el directorio en el que quiere evitar el listado. El archivo puede estar vacío.
  2. La forma que recomendaría un sysadmin es utilizando el archivo “.htaccess” y agregando la siguiente linea:

    Options -Indexes
     

    Esto deshabilita el listado en el directorio en donde se encuentra el  archivo “.htaccess” y en todos los subdirectorios que se encuentren por debajo. 

listado directorio apache

Otra forma de hacerlo es con la directiva “IndexIgnore, por ejemplo, para que no se listen los archivos PHP se usa así “IndexIgnore *.php“, si quieren bloquear todo solo escriben el asterisco (wildcard).

Si tienen acceso al archivos de configuración de Apache esto también se puede hacer desde ahí, pero no es la situación mas habitual.

WordPress 3.9 ya (casi) está entre nosotros

Ok, todavía no, pero falta muy poco, ya que a quienes alguna vez desarrollamos un plugin y lo publicamos en el sitio oficial de WordPress.org, recibimos información sobre cambios en la plataforma de modo de que podamos mantener nuestros plugins al día.

wordpress logo

WordPress

Si desarrollaron algún plugin a medida es una buena idea que se den una vuelta por acá, ya que van a encontrar cuales son los principales cambios que se vienen con la versión 3.9 de WordPress, obviamente que mientras no actualicen no habrá problemas, y además, en general el equipo de WordPress mantiene la compatibilidad con funciones disponibles en versiones anteriores, pero nunca es tarde para arreglar ése código que está usando funciones que están en camino a ser retiradas de WordPress.

Ya quiero probar WordPress 3.9

Como siempre sucede, la opción de actualizar automáticamente a WordPress 3.9 todavía no está disponible, y no lo estará por al menos unos días, actualmente la ultima versión estable es la 3.8.3. Pero si están apurados, pueden descargar el Release Candidate 2 desde acá, si bien no es una versión oficial, ya para el segundo RC se espera que todo esté andando bastante bien, obviamente no lo vayan a usar en producción, pero si quieren ver si se aproximan dolores de cabeza pueden darle una probadita con sus plugins.

Evita que tu blog en WordPress forme parte de una gigantesca botnet

Muchas veces se ha hablado de las varias formas en las que XMLRPC puede ser explotado, pero en éste caso una firma de seguridad descubrió una botnet que utilizaba la funcionalidad de realizar pingbacks de WordPress para realizar ataques de denegación de servicio distribuidos (DDOS).

Sucuri, la firma que realizó el descubrimiento, encontró que un sitio estaba recibiendo un DDOS por parte de miles de sitios legítimos que utilizaban el CMS WordPress. Y la vulnerabilidad explotada en todos ésos sitios era mediante el pingback que utiliza la API provista por XMLRPC. Afortunadamente deshabilitar el pingback no es tan difícil, es cuestión de instalar un plugin o agregar un par de lineas de código al archivo functions.php.

Éste es el código mágico para deshabilitar el pingback que deben agregar al archivo functions.php de su plantilla.

add_filter( ‘xmlrpc_methods’, ‘cibergeek_no_ping’);
function cibergeek_no_ping( $methods ) {
unset( $methods[‘pingback.ping’] );
return $methods;
}

Si no quieren meter mano en el código pueden instalar éste plugin, que solo desactiva el pingback, ya que XMLRPC es utilizado para otras tareas por plugins y aplicaciones que se conectan a WordPress mediante ésta API.

Además, pueden probar si alguno de sus sitios participó de éstos ataques utilizando una herramienta provista por la firma de seguridad. Tengan en cuenta que el listado es limitado, pero revisando los logs de su servidor pueden encontrar mas información, lo que deben buscar es algo similar a lo siguiente:

93.174.93.72 - - [09/Mar/2014:20:11:34 -0400] "POST /xmlrpc.php HTTP/1.0" 403 4034 "-" "-" "POSTREQUEST:<?xml version=\x221.0\x22 encoding=\x22iso-8859-1\x22?>\x0A<methodCall>\x0A<methodName>pingback.ping</methodName>\x0A<params>\x0A <param>\x0A  <value>\x0A   <string>http://fastbet99.com/?1698491=8940641</string>\x0A  </value>\x0A </param>\x0A <param>\x0A  <value>\x0A   <string>yoursite.com</string>\x0A  </value>\x0A </param>\x0A</params>\x0A</methodCall>\x0A"

94.102.63.238 – - [09/Mar/2014:23:21:01 -0400] "POST /xmlrpc.php HTTP/1.0" 403 4034 "-" "-" "POSTREQUEST:\x0A\x0Apingback.ping\x0A\x0A \x0A \x0A http://www.guttercleanerlondon.co.uk/?7964015=3863899\x0A \x0A \x0A \x0A \x0A yoursite.com\x0A \x0A \x0A\x0A\x0A"