readme.html es un archivo que viene incluido por defecto en WordPress. Su función principal es mostrar información sobre la instalación, incluyendo la versión de WordPress y enlaces a la documentación.

¿Qué contiene readme.html?

Al acceder a:

https://tudominio.com/readme.html

Normalmente se muestra información como:

  1. La versión de WordPress instalada.
  2. Enlaces a la documentación oficial.
  3. Información sobre la instalación.

¿Por qué representa un riesgo?

Por sí solo, readme.html no es una vulnerabilidad. El problema es que puede facilitar el reconocimiento del sitio (reconnaissance) proporcionando información útil a un atacante.

Si el archivo revela una versión antigua de WordPress, un atacante puede:

  1. Buscar vulnerabilidades conocidas para esa versión.
  2. Automatizar ataques dirigidos.
  3. Comprobar si el sitio no ha sido actualizado.
  4. Priorizar el sitio como objetivo.

Aunque hoy en día existen otras formas de identificar la versión de WordPress, eliminar o restringir el acceso a readme.html reduce la información disponible para un posible atacante.

Cómo proteger readme.html

Método 1: Eliminar el archivo (recomendado).

Si no lo necesitas, simplemente elimínalo:

rm readme.html

Después de una actualización de WordPress, es posible que vuelva a aparecer, por lo que conviene revisarlo periódicamente.

Método 2: Bloquear el acceso en Apache.

Paso 1: Localiza el archivo .htaccess

Conéctate a tu servidor mediante:

  1. cPanel (Administrador de archivos)
  2. Plesk
  3. FTP (FileZilla)
  4. SSH

Importante: .htaccess es un archivo oculto. Si no lo ves, habilita la opción "Mostrar archivos ocultos" en tu administrador de archivos.

Paso 2: Haz una copia de seguridad

Antes de modificar .htaccess, crea una copia:

cp .htaccess .htaccess.bak

Así podrás restaurarlo si algo sale mal.

Paso 3: Edita el archivo .htaccess

Abre el archivo y añade las reglas antes del bloque de WordPress o justo después de los comentarios iniciales.

El bloque estándar de WordPress es similar a este:

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

Coloca tus reglas antes de # BEGIN WordPress para evitar que WordPress las sobrescriba.

Bloquear readme.html

<Files readme.html> Require all denied </Files>

Bloquear archivos ocultos

<FilesMatch "^\."> Require all denied </FilesMatch>

Protege archivos como:

  1. .env
  2. .git
  3. .htaccess
  4. .htpasswd

Para Apache 2.2:

<Files readme.html> Order allow,deny Deny from all </Files>

Método 3: Bloquear en Nginx

location = /readme.html { deny all; return 404; }

Después recarga el servicio:

sudo systemctl reload nginx

Método 4: Bloquear varios archivos informativos

Es recomendable bloquear también otros archivos que pueden revelar información:

<FilesMatch "^(readme.html|license.txt)$"> Require all denied </FilesMatch>

En Nginx:

location ~* ^/(readme\.html|license\.txt)$ { deny all; return 404; }

Cómo saber si tu sitio usa Apache

Puedes comprobarlo de varias formas:

  1. Revisa el panel de tu proveedor de hosting; normalmente indica si el servidor es Apache, Nginx o LiteSpeed.
  2. Consulta las cabeceras HTTP con herramientas como curl: curl -I https://tudominio.com
  3. Si aparece una cabecera similar a Server: Apache o Server: LiteSpeed, es probable que .htaccess sea compatible.
  4. Si las reglas de .htaccess no tienen ningún efecto, es posible que el sitio esté usando Nginx (que no utiliza .htaccess) o que Apache tenga deshabilitado AllowOverride.

En un entorno WordPress con Apache correctamente configurado, estas reglas son una forma eficaz de reducir la exposición de archivos sensibles y dificultar las tareas de reconocimiento de posibles atacantes.

Cómo comprobar si está protegido

Accede desde el navegador:

https://tudominio.com/readme.html

Deberías recibir:

  1. 403 Forbidden
  2. 404 Not Found

Si el archivo se muestra correctamente, cualquier persona puede consultar la información que contiene.

¿Es suficiente eliminar readme.html?

No. Aunque eliminarlo es una buena práctica, un atacante aún puede obtener información mediante:

  1. Metadatos del código fuente.
  2. Archivos CSS y JavaScript de WordPress.
  3. La API REST /wp-json/.
  4. Plugins y temas instalados.
  5. Cabeceras HTTP.
  6. Herramientas de reconocimiento como WPScan.

Por eso, la seguridad debe basarse en varias capas.

Buenas prácticas adicionales

Además de ocultar readme.html, conviene:

  1. Mantener WordPress, plugins y temas siempre actualizados.
  2. Eliminar plugins y temas que no utilices.
  3. Desactivar o restringir xmlrpc.php si no lo necesitas.
  4. Limitar los intentos de inicio de sesión para reducir ataques de fuerza bruta.
  5. Utilizar un firewall de aplicaciones web (WAF).
  6. Proteger archivos sensibles como wp-config.php, copias de seguridad .bak, .old y archivos de configuración.
  7. Revisar periódicamente los permisos de archivos y directorios.

En resumen, readme.html no compromete el sitio por sí mismo, pero puede ayudar a un atacante durante la fase de reconocimiento. Eliminarlo o bloquear su acceso es una medida sencilla que reduce la exposición de información y forma parte de una estrategia de endurecimiento (hardening) de WordPress.