Actualización (21:55): si alguno actualiza desde Subversion, el
parche ya es oficial (¡gracias filex por el aviso!).
Pensaba no publicarlo (todavía) porque se trata de un problema que si
bien no compromete la seguridad puede dejar la versión 2.3 de
WordPress frita.
Será un descuido o directamente una cagada el no haber pensando en
ello, no sé muy bien cómo considerarlo, pero al menos ya hay parche.
Preámbulo
Con WordPress 2.3 apareció el sistema de etiquetas de forma nativa y al
igual que otros muchos sistemas se pueden combinar varias, si etiquetas
una entrada por "ubuntu, trucos, seguridad" la entrada aparecerá en el
archivo de las tres etiquetas pero también se puede buscar por
"ubuntu+seguridad" para mostrar los temas que al menos tengan
esas dos etiquetas.
Esto no es nuevo y otros muchos servicios que incluyen etiquetas
ofrecen esta característica de "unir etiquetas".
El problema de las queries largas
El problema es que (resumiendo) no han puesto ninguna limitación a
este comportamiento por lo que se pueden pedir entradas con
cientos de intersecciones por ejemplo:
url-del-sitio/tag/ubuntu+seguridad+trucos+abc+bcd+cdf+edf+etc+etc2+etc3+etc4
Al hacerlo se crean peticiones (queries) muy complejas que no son
nada eficientes y que llegan a saturar totalmente la máquina
donde nos alojamos. O lo que es lo mismo: podemos saturar una máquina
con una URL estructurada a mala leche.
Esto ha salido a la luz por un reporte en la lista de wp-testers con
una bonita query SQL que se tomó su tiempo en procesarse:
# Query_time: 77983 Lock_time: 0 Rows_sent: 0 Rows_examined: 0
Las soluciones
Hay dos soluciones, según Ryan Boren limitar el número de etiquetas
que se pueden juntar a un valor bajo de entre 3 y 5 lo cual no quita
ningún tipo de funcionalidad (rara vez se usan las intersecciones y yo
nunca he visto usar más de dos). Ya hay un
ticket
con parche incluido para solucionarlo.
Para arreglarlo es lo de siempre: hay que editar el fichero
wp-includes/query.php, buscar el mismo código que aparece en el
enlace anterior, borrar lo que sale en rojo y añadir lo que sale en
verde.
La otra solución es de parte de Alexander Concha que es un parche más completo según sus propias palabras (primer comentario de esta entrada) y no limita nada pero usa un método alternativo que no provoca el problema.


Comentarios