Categories
WordPress

Nueva actualización: WordPress 2.3

Luego de pedir que me habilitaran el acceso por SSH y poner la página de mantenimiento del blog por unas horas, finalmente terminé de modificar algunos plugins y parte de los temas que uso para que sean compatibles con WordPress 2.3, pero esta vez, para facilitar las actualizaciones futuras, estoy usando una rama del servidor de control de versiones de WordPress. 😉

El proceso de actualización es -- como siempre -- simple y por suerte para mi, los temas y casi todos los plugins que uso eran compatibles con WordPress 2.3, sólo tuve que agregar cierta funcionalidad al plugin "All in One SEO Pack".

Si notan algo raro y tienen algo de tiempo para reportarlo, les agradezco de antemano su colaboración. 🙂

Categories
WordPress

WP-Cache vs 1BlogCacher

Tanto WP-Cache como 1BlogCacher son plugins para WordPress que almacenan copias estáticas de las URLs accedidas, esto con el objetivo de incrementar la velocidad de respuesta y reducir la carga del servidor.

Cuando vi el anuncio de 1BlogCacher y sin haber probado el plugin, tenía algunas sospechas de que era más limitado que WP-Cache. Luego de ver los números que publicó Andrés en relación al comportamiento de éstos plugins, me llamó la atención el número de peticiones fallidas que tenía WP-Cache, por lo que decidí hacer una prueba y explicar el posible motivo de estas fallas.

El entorno sobre el que se realizó esta pequeña prueba es:

Sistema Operativo
Debian Sid (Kernel 2.6.22-1-686) sobre VMWare.
Servidor Web
Apache/2.2.6 + PHP 5.2.3-1+b2.
Servidor de Base de Datos
MySQL 5.0.27 sobre Windows XP*.
WordPress
Versión en desarrollo.

Número de páginas servidas

Para la prueba, al igual que Andrés, utilizo Apache Benchmark con los siguientes parámetros : ab -c5 -t10 http://localhost/wp/, que equivale a hacer la prueba durante 30 segundos con nivel de concurrencia 5.

-c concurrency
Number of multiple requests to perform at a time. Default is one request at a time.

-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally. Use this to benchmark the server within a fixed total amount of time. Per default there is no timelimit.

Prueba sin ningún plugin activado:

code:

hell:~# ab -c5 -t30 http://192.168.1.202/~alex/wp1/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.202 (be patient)
Finished 236 requests

Server Software:        Apache/2.2.6
Server Hostname:        192.168.1.202
Server Port:            80

Document Path:          /~alex/wp1/
Document Length:        4904 bytes

Concurrency Level:      5
Time taken for tests:   30.338809 seconds

Complete requests:      236

Failed requests:        1
   (Connect: 0, Length: 1, Exceptions: 0)
Write errors:           0
Total transferred:      1225765 bytes
HTML transferred:       1162249 bytes

Requests per second:    7.78 [#/sec] (mean)

Time per request:       642.771 [ms] (mean)
Time per request:       128.554 [ms] (mean, across all concurrent requests)
Transfer rate:          39.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       8
Processing:   131  632 1551.8    474   22284
Waiting:      131  631 1551.7    474   22283
Total:        131  632 1551.7    474   22284

Percentage of the requests served within a certain time (ms)
  50%    474
  66%    540
  75%    609
  80%    635
  90%    742
  95%    866
  98%   1081
  99%   5015
 10022284 (longest request)

Prueba con 1BlogCacher activado:

code:

hell:~# ab -c5 -t30 http://192.168.1.202/~alex/wp1/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.202 (be patient)
Finished 359 requests

Server Software:        Apache/2.2.6
Server Hostname:        192.168.1.202
Server Port:            80

Document Path:          /~alex/wp1/
Document Length:        5084 bytes

Concurrency Level:      5
Time taken for tests:   30.83504 seconds

Complete requests:      359

Failed requests:        0
Write errors:           0
Total transferred:      1915920 bytes
HTML transferred:       1830240 bytes

Requests per second:    11.93 [#/sec] (mean)

Time per request:       418.990 [ms] (mean)
Time per request:       83.798 [ms] (mean, across all concurrent requests)
Transfer rate:          62.19 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:    80  413 695.4    302    7783
Waiting:       80  413 695.3    302    7783
Total:         80  413 695.4    302    7783

Percentage of the requests served within a certain time (ms)
  50%    301
  66%    374
  75%    480
  80%    553
  90%    684
  95%    804
  98%    850
  99%   2017
 100%   7783 (longest request)

Prueba con WP-Cache activado:

code:

hell:~# ab -c5 -t30 http://192.168.1.202/~alex/wp2/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.202 (be patient)
Completed 5000 requests
Completed 10000 requests
Finished 10057 requests

Server Software:        Apache/2.2.6
Server Hostname:        192.168.1.202
Server Port:            80

Document Path:          /~alex/wp2/
Document Length:        4992 bytes

Concurrency Level:      5
Time taken for tests:   30.2791 seconds

Complete requests:      10057

Failed requests:        0
Write errors:           0
Total transferred:      53382556 bytes
HTML transferred:       50204544 bytes

Requests per second:    335.20 [#/sec] (mean)

Time per request:       14.916 [ms] (mean)
Time per request:       2.983 [ms] (mean, across all concurrent requests)
Transfer rate:          1737.54 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    4   2.9      5      16
Processing:     2    8  52.8      8    3904
Waiting:        0    5  52.8      5    3902
Total:          2   13  52.8     14    3907

Percentage of the requests served within a certain time (ms)
  50%     14
  66%     14
  75%     14
  80%     14
  90%     15
  95%     15
  98%     16
  99%     17
 100%   3907 (longest request)

En mi humilde opinión, el número de peticiones fallidas en las pruebas que hizo Andrés, se debe a que el tiempo de la prueba era muy corto para 100 peticiones.

Consumo de memoria

Otro punto importante a tomar en cuenta es el consumo de memoria por petición:

La enorme diferencia en el consumo de memoria entre ambos plugins, se debe principalmente a que WP-Cache utiliza la funcionalidad que WordPress provee para el cache estático y termina la ejecución del script antes de que se incluya gran parte de los archivos que forman parte del mismo (es por este motivo que muchos plugins no funcionan con WP-Cache).

Conclusiones

Para blogs con bastante tráfico WP-Cache sigue siendo la alternativa más adecuada en relación a 1BlogCacher, porque además de servir más páginas por segundo, también reduce considerablemente el consumo de memoria.

Al parecer las pruebas empíricas que hice confirmaron mis sospechas iniciales con respecto a las limitaciones de 1BlogCacher. Si cometí algún error, pueden indicármelo en los comentarios. 😉

*: no tenía ganas de bajar algo de 30 MB sólo para hacer la prueba en Debian. 😀

Categories
Seguridad Web WordPress

WordPress 2.2.3

Actualización: Ya publicaron el anuncio oficial, que por cierto me causa un poco de gracia porque mencionan mi nombre y el nick que uso para reportar vulnerabilidades más leves. 😀

Finalmente ya está disponible la versión 2.2.3 de WordPress, que corrige múltiples problemas de seguridad, entre los cuales, uno permite obtener los datos de cualquier usuario de un blog afectado.

Los archivos que cambian con respecto a la anterior versión son:

  • wp-includes/default-filters.php
  • wp-includes/plugin.php
  • wp-includes/query.php
  • wp-includes/formatting.php
  • wp-includes/feed-rss2-comments.php
  • wp-includes/rewrite.php
  • wp-includes/version.php
  • wp-includes/pluggable.php
  • wp-includes/widgets.php
  • wp-includes/rss.php
  • wp-includes/vars.php
  • xmlrpc.php
  • wp-mail.php
  • wp-admin/admin-ajax.php
  • wp-admin/admin-functions.php
  • wp-admin/rtl.css
  • wp-admin/options.php
  • wp-admin/install-rtl.css
  • wp-admin/widgets-rtl.css

Cualquiera que esté usando WordPress 2.2.2 o versiones anteriores con permalinks habilitadas (a.k.a URL's amigables), tiene que actualizar si o si a la versión que acaban de liberar o a la beta 2 de WordPress 2.3, si no lo hace, por lo menos debe bloquear el acceso a xmlrpc.php.

Por otro lado, también me comentan que liberarán una nueva versión de WordPress MU en los próximos días.

Categories
WordPress

Novedades de WordPress 2.3

Acaba de liberarse la primera beta de la versión 2.3 (incluye el parche para la vulnerabilidad previamente comentada).

Complementando a lo que Andrés ya publicó sobre las novedades que WordPress 2.3 incluirá, aquí les presento otras:

  • Notificación de la existencia de versiones nuevas, por el momento éstas notificaciones aparecen en el pie de página de la parte de administración. En mi opinión éstas deberían ser más visibles y llamativas -- algo parecido a lo que hace el plugin Akismet cuando recién se instala.

    Las consultas de nuevas versiones se hacen a http://api.wordpress.org/core/version-check/1.0/?version=VERSION&php=VERSION_PHP&locale=

  • Redirecciones automáticas en los siguientes casos:

    • Si la dirección URL del blog usa www o no (se obtiene del valor definido en las opciones).
    • Para el caso de blogs -- como éste -- que usen estructuras de permalinks que terminan en /, antes se aceptaba por ejemplo http://www.buayacorp.com/archivos/cusco y http://www.buayacorp.com/archivos/cusco/, ahora se redirigen correctamente a la versión con /.
    • Si sólo se especifica parte del nombre de la entrada, http://www.buayacorp.com/archivos/cus será redireccionado a http://www.buayacorp.com/archivos/cusco/.
  • Uso de Google Blog Search para mostrar los enlaces entrantes.
  • Posible auditoría de seguridad antes de la liberación de una versión estable.

Sin duda, el punto que más me llama la atención es la auditoría de seguridad al código de WordPress, que le vendría muy bien luego de los problemas reportados a lo largo del 2007, aunque me parece que éstos problemas no se reducirán mucho si no se mejora la forma de acceder a los datos.

Categories
Seguridad WordPress

WordPress: Lista de plugins no recomendados – Parte 2

Como seguramente saben, Weblog Tools Collection organizó un concurso de plugins para WordPress y hoy, casi un mes después que terminó el concurso, dan a conocer los resultados:

  1. El ganador del gran premio, el primero, de esta competición de Plugins para WordPress es para Anirudh Sanjeev por su plugin OneClick. OneClick es un plugin para WordPress y una extensión para Firefox que permite la instalación rápida y directa de plugins y temas en tu blog, con solo un clic. Ha recibido el premio más cuantioso, con un servidor dedicado básico para 6 meses (valorado en más de 1000 dólares) y un iPod Nano de 8 Gb (valorado en 600 dólares) o el dinero equivalente.
  2. El ganador del segundo premio es para Barry por su plugin MyDashboard. MyDashboard permite la rápida personalización del escritorio de WordPress.
  3. El ganador del tercer premio es para Keith Dsouza por su plugin WordPress Automatic Upgrade el cual permite actualizar de forma automática la instalación de tu WordPress desde la interfaz de administración.
  4. El ganador del premio de consolación ha sido Ozh por su plugin Who Sees Ads. WhoSeesAds es un maravillo e útil módulo que permite a los usuarios de WordPress determinar que anuncios se deben ver en cada momento en su blog.

Fuente

Luego de hacer unas pruebas en una instalación local de WordPress y ver someramente el código de estos plugins, veo que ninguno de ellos toma en cuenta el tema de seguridad, así que haré mi propia lista de plugins tomando como parámetro de ordenación el grado de peligrosidad (de mayor a menor):

  1. WordPress Automatic Upgrade: Permite a cualquier usuario no autenticado:
    • Generar y descargar los archivos de WordPress (incluye wp-config.php).
    • Generar y descargar una copia de seguridad de la base de datos donde está instalado el plugin.
    • Activar/Desactivar todos los plugins.
    • Actualizar la versión de WordPress.
  2. OneClick: Al ser vulnerable a CSRF, permite descargar plugins -- o código malicioso -- desde cualquier URL.
  3. Who Sees Ads: Es vulnerable a CSRF y XSS.
  4. MyDashboard: Es vulnerable a CSRF y XSS.

Si tienen esos plugins instalados (en especial los dos primeros), les sugiero que los desactiven cuanto antes, porque gracias a toda la publicidad que están recibiendo, seguramente pronto van a ser blanco de ataques.

Viendo estos ejemplos, no sé cómo algunos bloggers se quejan de la cantidad de fallos del código principal de WordPress y no dicen nada al respecto de los plugins, cuando muchas veces éstos últimos provocan problemas de seguridad aún más graves.