Prevenir acceso o eliminar automáticamente readme.html, license.txt, wp-config-sample.php

15 dic 2010, 11:53:00
Vistas: 19.6K
Votos: 16

Una pregunta rápida que podría ayudar un poco con la seguridad. Noté que el archivo readme.html tiene el número de versión listado. Vuelve a aparecer después de cada actualización, al igual que licence.txt y wp-config-sample.php.

¿Existe una forma fácil de hacer que WordPress elimine automáticamente estos archivos después de una actualización?

Ya bloqueé el número de versión para que no aparezca en las metaetiquetas, feeds RSS, atom, etc.

Sé que este tipo de seguridad no es exactamente tan útil, pero pensé que podría ser un pequeño comienzo. Escuché que las personas pueden simplemente verificar la versión de jQuery incluida en WP-includes y compararla con la versión de WP que la incluyó.

0
Todas las respuestas a la pregunta 5
2
22

No es necesario eliminar estos archivos. Es mucho más sencillo simplemente bloquear el acceso a ellos. Si estás usando URLs amigables, ya tienes un archivo .htaccess. Usar .htaccess para bloquear los archivos es seguro y solo necesitas añadir una directiva una vez.

Bloquear archivos se hace añadiendo una directiva a .htaccess así:

    <files nombre-de-archivo.extensión>
         order allow,deny
         deny from all
    </files>

Entonces, para bloquear readme.html haces esto:

    <files readme.html>
         order allow,deny
         deny from all
    </files>

Haz lo mismo con el archivo de licencia o cualquier otro archivo que quieras evitar que alguien acceda. Solo abre .htaccess en Notepad o cualquier otro editor de texto básico, añade las directivas y guarda, asegurándote de que el editor de texto mantenga el nombre del archivo exactamente - sin ningún .txt al final.

15 may 2011 15:22:53
Comentarios

Esta es en realidad la opción con la que terminé optando. Funciona perfectamente.

Sahas Katta Sahas Katta
16 may 2011 07:49:06

Cuidado, ¡la sintaxis anterior solo es válida hasta Apache 2.2! A partir de Apache 2.4 y versiones posteriores, usa Require all denied (reemplazando esas 2 líneas internas). Más detalles aquí

Frank N Frank N
7 mar 2017 09:00:57
1

Aquí está mi propuesta:

RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) - [R=404,NC,L]
  • 404 (no existe) en lugar de 403 (prohibido) para evitar dar pistas sobre su existencia.
  • también en subcarpetas (por ejemplo, temas y plugins, que podrían ofrecer oportunidades de ataque)
  • insensible a mayúsculas/minúsculas, con extensiones flexibles, también captura README.html o license.html (siéntete libre de agregar sospechosos habituales como changelogs|faq|contributing)

Personalmente, también bloquearía:

RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ - [NC,F]

Notas:

  • '?:' simplemente declara que el paréntesis no es de coincidencia (sin importancia).
  • requiere que RewriteEngine esté on (lo más probable es que lo esté. sería raro usar WordPress sin esto... (enlaces permanentes feos, etc...)).
  • insertar antes de la sección # BEGIN WordPress en tu .htaccess
6 sept 2015 09:44:36
Comentarios

¿Alguna ventaja de usar RewriteRule en lugar de FilesMatch?

Prof. Moriarty Prof. Moriarty
27 sept 2023 22:10:13
4
add_action('core_upgrade_preamble','mi_funcion_para_eliminar_archivos');

Edición: también puedes probar estos

add_action('upgrader_pre_install','mi_funcion_para_eliminar_archivos');
add_action('upgrader_post_install','mi_funcion_para_eliminar_archivos');
15 dic 2010 12:37:46
Comentarios

Gracias, descubrí la función php unlink y funciona, pero hay un problema. El hook que proporcionaste parece ejecutarse simplemente al visitar la sección de Actualizaciones bajo el Escritorio. ¿Hay otro hook para después de que ocurra la actualización?

Sahas Katta Sahas Katta
15 dic 2010 22:16:31

Voy a revisarlo y te aviso

Atif Atif
16 dic 2010 12:23:40

@Sahas @atif089 ¿Lograron que esto funcione?

INT INT
12 may 2011 13:38:20

En lugar de borrar (¡por si acaso quieres leer el archivo readme!) puedes usar esto en tu función chmod("/ruta/al/readme.txt", 0640);

Bysander Bysander
10 oct 2016 15:07:38
0

Solución 2023

Si utilizas Apache, actualmente en la versión 2.4.5x, como tu servidor web y deseas optar por la ruta del archivo ".htaccess", aquí tienes algunas opciones (además de la respuesta de Frank) para hacerlo:

Devolver "Prohibido" al usuario:

En este caso, el "usuario"/"hacker"/"adversario"/"pentester" descubriría que esos archivos existen en tu servidor, ¡pero no tiene acceso a ellos!

<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
      Require all denied
</FilesMatch>

Devolver "404" al usuario:

En este caso, el "usuario"/"hacker"/"adversario"/"pentester", teóricamente, asumiría que esos archivos ¡ni siquiera existen en tu servidor!

<FilesMatch "(?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?)">
      Redirect 404
</FilesMatch>
21 jul 2023 13:46:25
0

Solución actual para WordPress, Actualizada 2025

Estoy combinando las respuestas/comentarios anteriores y aplicándolos a la pregunta actual (además de abordar las preocupaciones de seguridad de las respuestas previas).

RewriteRule (?:readme|license|changelog|-config|-sample)\.(?:php|md|txt|html?) index.php [L]
RewriteRule \.(?:psd|log|cmd|exe|bat|c?sh)$ index.php [L]

Usar index.php [L] redirigirá todo a WordPress como la página 404 del sitio, en lugar de mostrar la página de error 403/404/etc del servidor web. Al hacer esto, el posible hacker no verá el cambio en la página de error que se muestra.

30 mar 2025 20:25:50