¿Cómo oscurezco mi instalación de Wordpress a través de htaccess?

9

(Soy consciente de que no se recomienda la seguridad a través de la oscuridad).

Estoy tratando de ocultar el hecho de que estoy usando Wordpress. Esta publicación es útil, pero solo aborda el contenido (más o menos). Estoy interesado en que ocurra lo siguiente:

  1. El usuario intenta acceder a cualquier URL con wp*una subcadena a través de su navegador.

    Resultado: Redirigido a la página 404.

  2. El usuario / administrador del blog sabe que para iniciar sesión deben ir http://example.com/blogin/.

    Resultado: apache los redirige ahttp://example.com/wp-admin/.

  3. Si un usuario intenta acceder directamente wp-admindesde su navegador, se lo envía al # 1.

    Resultado: Redirigido a la página 404.

Cosas que he hecho hasta ahora

  1. Noté que, para una instalación predeterminada de WordPress, podía acceder a cualquiera de los wp*archivos en el directorio raíz (relativo) de la instalación de WP. Específicamente wp-settings.phpfue problemático porque dio información sobre mi configuración. Si un usuario accede a él, arrojará algunos errores de PHP y revelará parte de la estructura del directorio. Edité mi archivo php.ini para display_errorsdesactivar. Ahora el acceso http://example.com/wp-settngs.phpabre una página en blanco.

  2. Esto en sí mismo no es ideal porque revela que wp-settings.phpexiste. De hecho, wp*es posible acceder a todos los archivos diferentes (con resultados diferentes). Luego pongo lo siguiente en mi archivo htaccess:

          RewriteEngine On
          RewriteBase /
          RewriteCond %{PATH_INFO} wp* [NC]
          RewriteRule .* - [F]
    

    Esto funcionó muy bien! Cualquier cosa con un wp*fue enrutada a mi página 404 personalizada. Pero ahora no puedo acceder a mi página de administrador.

  3. He intentado insertar esta línea en el código anterior: RewriteRule ^blogin wp-admin [NC,R,L]. Se suponía que debía ser justo después, RewriteBasepero esto no funcionó.

  4. Traté de hacer un:

    <Directory /home/example/wp*> 
     Order Allow, Deny 
     Allow from example.com 
     Deny from all 
    </Directory> 
    

    esperando que un árbitro de mi sitio (a través de la reescritura de la regla) pueda acceder a wp-admin, pero no a alguien de fuera. Esto tampoco funcionó. Apache se quejó de que no puede usar esta directiva desde htaccess.

He leído la documentación de apache; Entiendo los conceptos, teóricamente, pero necesito ayuda práctica.

EDITAR: Estoy buscando una solución que use .htaccess en lugar de httpd.conf ya que mi configuración particular hace que usar httpd.conf sea inconsistente.

Avery Chan
fuente
¿Has intentado cambiar el nombre de todos los archivos wp * a un prefijo diferente, así como cambiar todas las referencias a dichos archivos? Creo que esto será lo más fácil de hacer. Por supuesto, puede ir con la reescritura de URL, pero luego tendrá que asegurarse de que todos los enlaces no estén usando nombres wp * también, que es (en mi opinión) bastante similar a la sugerencia original.
LazyOne
Creo que uno de los beneficios de la reescritura de URL es que los recursos solicitados se pueden reasignar a otro prefijo ... Espero poder hacerlo sin cambiar el nombre de todos los archivos (que es el punto de pasar por esto) ...
Avery Chan

Respuestas:

8

TLDR; No es posible ocultar WordPress usando solo directivas en su archivo .htaccess.

Ahora viene una historia de dolor y horror. Nuestro amigo, fbh tenía razón sobre la dificultad de ocultar WordPress, no sería para cobardes de vientre amarillo. Arr! Aquí están los detalles de esta (mala) aventura. ¡Ten cuidado!

Motivación

Soy uno de esos tipos que le gustan las cosas perfectas. Me paso el tiempo de los residuos sobre-ingeniería de algo para ser el 'camino correcto'. Una de las cosas que no me gustó de la configuración predeterminada de WordPress fue que un usuario podía escribir http://ex.com/wp-settings.php y luego toda esta jerga de php vomitaría por todas partes. Eventualmente pude desactivar los errores a través de PHP, pero eso llevó a un mayor deseo de tener solo cosas que se convirtieron en recursos localizables desde el servidor ... y que todo lo demás se verificaría 404/3 'en nuestra página de búsqueda personalizada. Después de eso, tuve la idea de que me gustaría ocultar completamente el marco subyacente (es decir, WP) ... de todos modos ... si quieres ocultar WP, es posible. Pero es realmente difícil.

Pasos para tu perdición

  1. Modifique su configuración de PHP ini adecuadamente. (es decir, desactivar los errores de visualización) Puede pensar que esto es innecesario porque si estamos usando .htaccess para redirigir las cosas, la gente no verá los errores porque no pueden acceder a los recursos que causan el error (lo estoy mirando wp-settings.php). Pero podrían producirse errores en las páginas mostradas, por lo que definitivamente querrá eliminarlos. El hecho de que las WP_*directivas estén establecidas no significa necesariamente que las cosas funcionarán de la manera que usted piensa que lo harán. Descubrí que en mi servidor tenía que establecer los display_errors en falso PRIMERO, porque WP_DISPLAY_ERRORS asumió que la configuración predeterminada era falsa.

    Controlar la configuración ini de PHP puede ser algo tan simple como poner una directiva en su archivo .htaccess. O, en mi caso, tan complicado como crear un controlador CGI y luego colocar un archivo php.ini allí. YMMV dependiendo de su configuración.

  2. Elimine todo acceso a archivos / directorios con wp-prefijo. La idea es que su implementación de WP sea sobre su contenido, no sobre WP (a menos que esté específicamente enfocado en WP). No tiene sentido que la gente quiera ver lo que http; // ex.com/wp-cron.php tiene ... a menos que no sean buenos. Logré esto a través de esto:

     # If the resource requested is a `wp-*` file or directory, poop to a 403. 
     RewriteCond %{REQUEST_FILENAME} wp-.*$ [NC] 
     RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
     RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
     RewriteCond %{REQUEST_FILENAME} -d [NC] 
     RewriteRule .* - [F,L] 
    
  3. Aprenda cómo pasar por mordor Al eliminar todo el acceso a wp-*usted, ya no puede obtener acceso a la parte administrativa de WP. Eso realmente apesta. Además de esa decepción, te acabas de dar cuenta de que no sabes lo que RewriteCond %{ENV:REDIRECT_STATUS} ^$realmente hace. Bueno, lo que intenté hacer es darme una puerta trasera 'secreta' a la página de administración de WP. Usé este código:

     # If the resource requested is 'mordor' (with or without an ending
     # slash) do a URL rewrite to `wp-login.php`. 
     RewriteCond %{REQUEST_URI} mordor/?$ [NC]
     RewriteRule mordor/?$ /wp-login.php [NC,L]
    

    Entonces, la URL: http://ex.com/mordor debería llevarnos a la página de inicio de sesión. La razón por la que teníamos la REDIRECTlínea en el paso anterior es que, dado que esta URL se reescribe en una wp-*URL, no queremos que la primera regla de reescritura la obtenga. Dado que está siendo redirigido internamente, REDIRECT_STATUSse configurará correctamente y no nos empujará a la tierra 403/4.

  4. Eliminar wp-content Wordpress.stackexchange tiene un excelente artículo sobre cómo eliminar wp-content. Tienes que redefinir algunas constantes de WP y eso prácticamente funciona. También debe redirigir todos los accesos desde wp-content'cualquiera que sea el contenido'. Esto probablemente no será un problema si se trata de una implementación limpia. Si está modificando una implementación preexistente, tendrá que hacer algunas cosas adicionales.

  5. Reescribe las URL en wp-content opcional RewriteRule (.*)(wp-content)(.*) $1whatever-content$3 [NC,R,L] . Esto va en su archivo .htaccess. Si su usuario intenta acceder a algún contenido antiguo a través de una wp-contentURL, será redirigido aquí.

  6. Grep y reemplace todas las referencias a wp-content en su base de datos opcional . Todavía tienes wp-contenten tu base de datos. Si quieres liberar WP necesitas deshacerte de esas cosas. Exporté / mysql volcó mi base de datos, hice una búsqueda y reemplazo en la wp-contentcadena a la nueva cadena. Podrías decir ... ¿por qué tengo que hacer esto si Apache reescribirá mis URL? El problema es que el código fuente contendrá estas referencias, por lo que si realmente está interesado en ocultar WordPress, debe hacerlo. Nota: En este punto, debería haberme detenido y aceptado la realidad de que esto no iba a funcionar. Pero quería que el Sr. T se compadeciera de mí.

  7. Vuelva a colocar todas las referencias a wp-includesy wp-adminen la fuente. Gran parte de la funcionalidad de WordPress depende de estos dos directorios: wp-includesy wp-admin. Esto significa que estos nombres de directorio están codificados en el código fuente. Esto significa que tendría que crear nuevos directorios (ya que PHP usa el sistema de archivos del sistema operativo subyacente, no apache) para acceder a estos y luego ESCRIBE ESTOS en el html emitido. Esto es demasiado problema. Rápidamente me di por vencido y fui al baño a tomar una caca.

Lección

Claro, podría haber leído http://codex.wordpress.org/Hardening_WordPress y seguir esos pasos. Pero quería el sitio perfecto. Ahora solo quiero todas esas horas de regreso. Lo más importante que me impidió detenerme fue que no leí en ninguna parte de Internet que esto era mucho trabajo y casi imposible de hacer. En cambio, leí sobre personas que intentan hacerlo sin tener la menor idea de si tuvieron éxito o no. Entonces, para mi yo anterior, a quien le enviaré esto a través de Time Machine de Apple, no intentes ocultar WordPress. Que no vale la pena.

Avery Chan
fuente
Bueno, Avery, también soy el tipo que quiere ser perfecto. Primero, quería crear un multisitio de wordpress ocultando el hecho de que estoy usando wordpress. He pasado por muchos problemas y finalmente abandoné la idea de múltiples sitios. Debido a que muchos complementos no admiten múltiples sitios. Su séptimo punto indica que reemplazó wp-includesy envía un mensaje de wp-admintexto manualmente. Estoy bastante seguro de que examinó todos y cada uno de los archivos y los reemplazó manualmente. Eso es porque te perdiste algunos softwares útiles y útiles. Por ejemplo, podrías haber probado grepwin, lo que hace que ese trabajo sea más fácil
Giri
4

Si estás tratando de ocultar que estás usando WordPress debido a las galletas, entonces realmente tienes trabajo que hacer. Si haces el truco wp *, ¿qué pasa con wp-content y wp-includes? Sin poder alcanzarlos, romperás la página y se verá horrible.

Además, hay tantas cosas en Wordpress que esto realmente requiere algo de trabajo, y lo más probable es que tenga que volver a hacer mucho cuando se instale una actualización. (Como algunas redirecciones en Apache no funcionarán)

Si solo está tratando de esconderlo del Sr. y la Sra. De todos, entonces, por supuesto, debería ser capaz de hacer eso con oscuridad.

¿Has leído la guía de "endurecimiento de Wordpress"? Si no es así, deberías echarle un vistazo: http://codex.wordpress.org/Hardening_WordPress Da una gran introducción a muchas cosas que puedes hacer.

Además, si está ansioso por ocultar el hecho de que usa Wordpress, ¿por qué usarlo?

Frands Hansen
fuente
1. Re: wp-content / wp-includes Ver enlace en el post 2. Yo tengo lea la guía de endurecimiento de WordPress. 3. Su última pregunta se puede responder fácilmente leyendo el enlace que publiqué. No estoy tratando de ser grosero, pero esta pregunta tiene poco que ver con los méritos técnicos de mi propia pregunta. Mucha gente usa diferentes herramientas pero no desean anunciarlo. Para algunos es una decisión comercial.
Avery Chan
0

Intente hacer su configuración en la configuración de apache. Esto puede ser una inclusión de archivo como /etc/wordpress/htaccess. Esto le permitirá usar la Directorydirectiva de configuración. Sin embargo, deberá reiniciar Apache para cargar los cambios. Utilice el reinicio elegante si no desea interrupciones del servicio.

Para restringir los accesos al directorio con .htaccessarchivos, deben estar en los directorios apropiados. Funcionan de manera muy similar al contenido de una Directorydirectiva de configuración. Es posible que deba habilitar las .htaccessopciones requeridas en su configuración de apache. Este método no es tan eficiente como usar el comando en la configuración de apache, ya que debe analizarse con frecuencia.

BillThor
fuente
Estoy buscando una solución que no requiera editar mi archivo httpd.conf porque se puede sobrescribir (estoy en un host privado virtual). Editaré la pregunta apropiadamente.
Avery Chan
@Avry: deberá colocar las directivas que colocaría en la configuración <Directory> en un .htaccessarchivo en el directorio correspondiente. Nota: Apache recomienda usar la configuración si es posible. Utilice el control de versiones para protegerse contra sobrescrituras.
BillThor