Estoy tratando de escribir una rutina de oneboxing que le dé a las entradas de blog de WordPress un tratamiento especial. Entonces, dada una URL simple y sin adornos en el contenido, como
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/
¿Cómo detectaría que se trata de una instalación de WordPress, idealmente sin hacer un HTTP GET completo en cada URL que veo?
Ciertamente, hay convenciones comunes para las URL de WordPress con las que podríamos comenzar, lo que elimina al menos algunas URL de la contienda. En este caso lo es ...
Pero esa tampoco es una constante universal.
Intenté mirar los encabezados de esa URL usando HTTP HEAD , y veo:
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:18340
Content-Type:text/html; charset=UTF-8
Date:Thu, 07 Jun 2012 07:07:38 GMT
Keep-Alive:timeout=15, max=100
Server:Apache/2.2.9 (Ubuntu) DAV/2 PHP/5.2.6-2ubuntu4.2 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
Vary:Cookie,Accept-Encoding
WP-Super-Cache:Served legacy cache file
X-Pingback:http://blog.stackoverflow.com/xmlrpc.php
X-Powered-By:PHP/5.2.6-2ubuntu4.2
No creo que confiar en la presencia de WP-Super-Cache
sea particularmente confiable, y eso es lo único que veo en los encabezados que ayudaría, así que ¿tal vez no haya encabezados HTTP comunes en una instalación de WordPress?
Respuestas:
Según mi experiencia y búsqueda rápida de código, no hay formas deliberadas de que WP se identifique en los encabezados. Sin embargo, hay algunos que parecen lo suficientemente distintos y no es probable que se personalicen.
HEAD to
/wp-login.php
contendrá lo siguiente para la instalación de .org:Y para .com:
El nombre de la cookie se puede personalizar mediante la definición de
TEST_COOKIE
constante, pero laWP Cookie check
cadena está codificada en el núcleo, así como también seset_cookie()
solicita en la fuente del archivo.Para localizar
wp-login.php
hay algunos atajos de URL (implementadoswp_redirect_admin_locations()
desde WP 3.4 (ver ticket # 19607 ):/login
en la raíz del sitio se302
redirige awp-login.php
, donde sea que esté.Entonces, el único escenario que no se puede detectar de manera confiable si WP está instalado y confinado en el subdirectorio, sin ser utilizado para administrar la raíz del sitio.
fuente
Envíe una
HEAD
solicitud al/wp-feed.php
mismo directorio que/xmlrpc.php
(incluso en instalaciones de subdirectorios). En WordPress obtendrá unLocation
encabezado como respuesta que contiene la cadenafeed
.En su ejemplo
blog.stackoverflow.com
, obtendrá:La simple existencia de un archivo
xmlrpc.php
solo no es lo suficientemente segura. Cualquiera puede dar este nombre a un archivo.Advertencia: el
X-Pingback
encabezado se puede deshabilitar filtrando'wp_headers'
. Entonces mi sugerencia no es a prueba de balas.Relacionado: ¿ Pasos a seguir para ocultar el hecho de que un sitio usa WordPress?
fuente
X-Pingback:http://example.com/xmlrpc.php
en el encabezado una señal lo suficientemente fuerte como para asumir que es un blog de WP?xmlrpc.php
siempre está en el mismo directoriowp-feed.php
hasta donde puedo ver.wp-feed.php
es mejor.Agregue la URL con
?page_id=-1
y haga una solicitud HTTP HEAD para eso.En los blogs de WordPress autoinstalados, esto dará como resultado una respuesta 404.
En los blogs de wordpress.com, esto dará como resultado una respuesta 301 (que termina en una respuesta 200 si sigue la redirección).
En los sitios que no son de WordPress, debe obtener una respuesta 200 (suponiendo que la URL original sin la cadena de consulta le haya dado un 200), la cadena de consulta no debería hacer ninguna diferencia.
Ejemplo con una solicitud HEAD para
http://blog.stackoverflow.com/2011/03/a-new-name-for-stack-overflow-with-surprise-ending/?page_id=-1
:Ejemplo con una solicitud HEAD para
http://dailycrave.wordpress.com/2012/06/01/three-cheese-grilled-pizza/?page_id=-1
(siga los redireccionamientos desactivados):(¡Tenga en cuenta el huevo de Pascua de X-Hacker!)
Si sigues la redirección 301 para el blog wordpress.com, terminas con esto:
Tenga en cuenta el encabezado "Enlace" que contiene la
http://wp.me/
URL, que parece ser común a todos los blogs alojados en wordpress.com y podría usarse para identificarlos.Creo que esto funciona porque pasar
?page_id=-1
la URL anula la ruta predeterminada de los segmentos de la URL. No habrá una página con ID de -1, por lo que se servirá un 404 / redirect.fuente
page_id
variable. Cualquier tipo de método de detección que use encabezados probablemente pueda ser falsificado, por lo que no creo que valga la pena preocuparse demasiado por eso. Lo que simplemente deja falsos positivos para el CMS personalizado. No podría pensar en una variable más específica de WordPress que sea menos probable que se use en otros lugares. ¿Hay uno?Ni wp-super-cache está disponible en todas las instalaciones de WordPress, ni hay ningún formato fijo en las URL. Si bien la página de configuración de enlaces permanentes proporciona algunas configuraciones fijas para los esquemas de URL que se pueden usar, cualquiera puede usar cualquier esquema de URL personalizado. Por ejemplo, si alguien decide usar solo el nombre de la página / publicación en la URL, es más o menos imposible determinar si se trata de un sitio web de Wordpress.
La presencia de xmlrpc se puede usar para detectar, pero nuevamente, esto se puede deshabilitar.
Y, por último, incluso si obtiene un acceso completo a la URL, aún no es 100% posible detectar si la página está construida con WordPress. Todo depende de la plantilla del tema y de cómo se desarrolle.
Una forma bastante confiable es buscar la presencia wp-login y wp-admin. Pero incluso estos también podrían ser movidos. Sin embargo, iría por este camino.
fuente
Dos alternativas a los comentarios, configura tu propio encabezado de WordPress. Suelta esto en las funciones de tu tema.php.
La huella digital de escaneo WP (ruby), sigue varios pasos para tratar de averiguar si se está utilizando WordPress, como buscar el directorio del complemento, el nombre del tema, las metaetiquetas, el archivo Léame, etc. (No tengo idea de cuán preciso es realmente esto ) http://code.google.com/p/wpscan/source/browse/#svn%2Ftrunk%2Flib%2Fwpscan
fuente
¿Qué tal enviar una solicitud de cabecera a uno de los archivos que comienzan con el prefijo wp-? Lo ideal es mirar wp-login.php. Si existe, eso significa que el sitio web ejecuta WordPress.
fuente
wp-login.php
podría ubicarse en una subcarpeta.