> For the complete documentation index, see [llms.txt](https://b4zh.gitbook.io/b4zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://b4zh.gitbook.io/b4zh/hacking-en-wordpress/teoria/arquitectura-de-wordpress.md).

# ARQUITECTURA DE WORDPRESS

> WORDPRESS ES UNA BASE DE DATOS Y FICHEROS EN PHP, A NIVEL FUNCIONAL.

ENTENDER COMO ESTÁ ORGANIZADO EL SISTEMA Y COMO INTERACTUAN SUS COMPONENTES PRINCIPALES ENTRE SI.

## MODELO CLIENTE-SERVIDOR

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FfrYN7MxdXMXP32NMLo7P%2Fimagen.png?alt=media&amp;token=c0537c0b-2e04-477a-bd46-99f7af63d37b" alt=""><figcaption></figcaption></figure>

## COMPONENTES

### WP CORE

Núcleo de WP, conjunto de ficheros en PHP que forman la base del sistema.

Estos fichero poseen la lógica para:

* Cargar el entorno.
* Procesar peticiones.
* Interactuar con la base datos.
* Ejecutar funciones internas.
* Invocar a las funciones de los temas y plugins

Están organizados en los directorios:

* wp-include | wp-admin

Ficheros de entradas principales, cuando llega una petición, el fichero principal que se ejecuta es:

* index.php -> actua como punto de entrada al sistema.

***

### BASE DE DATOS RELCIONAL

En una instalación estándar de Wp se crean 12 tablas, las que destacan son:

* wp\_posts -> almacena las entradas de blog.
* wp\_users -> almacena los usuarios y sus credenciales generalmente cifradas.
* wp\_options -> contiene las configuraciones generales del sitio.
* wp\_postmeta -> contiene los metadatos asociados a los posts, a las entradas de blog.
* wp\_term\* -> gestionan las categorías, etiquetas y taxonomias.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FsAw7lyXRmkKzIKdYgrIq%2Fimagen.png?alt=media&amp;token=0c456685-389d-4b83-9ccb-a35e69746917" alt=""><figcaption></figcaption></figure>

***

### TEMAS

CONJUNTO DE FICHEROS QUE DEFINEN LA ESTRUCTURA HTML A TRAVÉS DE LA DISPOSICIÓN DE CONTENIDOS Y EL ESTILO VISUAL.

Cada tema por lo menos debe contener:

* style.css -> hoja de estilos principal.
* index.php -> fichero principal.
* functions.php -> se ejecuta con al WP CORE y permite extender funcionalidades, potencialmente aquí se puede inyectar inyectar código malicioso para conseguir por ejemplo, una RCE.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FGchWy2drTGVsKGEc3Jic%2Fimagen.png?alt=media&amp;token=00c8b11d-8417-43c1-be40-a1b81e9af429" alt=""><figcaption></figcaption></figure>

&#x20;\---

### PLUGINGS

Módulos de PHP que extienden la funcionalidades del sistema.

Se colocan en el directorio `wp-content/plugins/`.

Extensiones de WP.

EJ: PLUGIN WOCOMMERCE PARA QUE TU SITIO WEB SEA UNA TIENDA ONLINE.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FwuBa85eDtQ7Ouk1achQj%2Fimagen.png?alt=media&amp;token=705b8d1f-9c6f-4aea-830e-d44edd836370" alt=""><figcaption></figcaption></figure>

**PLUGIN DE SEGURIDAD:** PUEDE HABER DETECCIÓN POR FIRMAS O POR PATRONES CÓMUNES DE CODIGO MALICIOSO EN PHP. NO EXISTE LA HEURÍSITCA.

***

### HOOKS

GANCHOS.

PERMITE QUE LOS TEMAS Y PLUGINS SE INTEGREN SIN MODIFICAR EL NÚCLEO. PARA QUE SE PUEDAN COMUNICAR ENTRE SÍ.

#### ACCIONES

PUNTOS DONDE SE PUEDE EJECUTAR ADICIONAL.

#### FILTROS

PUNTOS DONDE SE PUEDE INTERCEPTAR Y MODIFICAR DATOS ANTES DE QUE SE PROCESEN O SE MUESTREN.

***

### CARGA DEL SISTEMA

CUANDO ALGUIEN ACCEDE AL SITIO EN WORDPRESS, EL FLUJO INTERNO ES EL SIGUIENTE.

* USUARIO ACCEDE.
* A NIVEL DE WP SE EJECUTE EL INDEX.PHP, CARGA POR INCLUSIÓN DE FICHEROS, LOS FICHEROS PHP DE ACUERDO A LA SOLICITUD DEL USUARIO.
* SE INICIALIZA EL ENTORNO, SE HACE LA CONEXIÓN A LA BASE DE DATOS Y SE CARGA EN NÚCLEO DE WP.
* SE CARGAN LOS PLUGINS ACTIVOS.
* SE CARGA EL TEMA ACTIVO.
* SE EJECUTAN LOS HOOKS.
* SE DETERMINA QUE PLANTILLA SE VA A USAR.
* SE GENERA EL HTML FINAL QUE SE ENVÍA AL NAVEGADOR DEL USUARIO.

PASA EN POCOS SEGUNDOS.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FfE7RF7IVYDTK46o5sHcy%2Fimagen.png?alt=media&amp;token=0102dacf-1c3c-4b1c-aea1-4c2cf2d05f60" alt=""><figcaption></figcaption></figure>

***

### API REST

WP INCORPORA UNA API DEL PROTOCOLO REST.

INTERACTUAR CON EL CONTENIDO MEDIANTE SOLICITUDES DEL PROTOCOLO HTTP.

PODEMOS CREAR, EDITAR Y ELIMINAR EL CONTENIDO USANDO LOS MÉTODOS GET, POST, PUT Y DELETE.

DE FORMA PREDETERMINADA LA API NO VIENE BIEN CONFIGURADA, Y SE PUEDE OBTENER INFORMACIÓN DEL WP DENTRO DE ELLA, INCLUSO SIN LOGUEARNOS EN EL WP.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FVODGbbjHyX6bfV7SMS4z%2Fimagen.png?alt=media&amp;token=e0ff5b2e-860b-455a-8dc9-89fad7a55ebd" alt=""><figcaption></figcaption></figure>

***

### SEGURIDAD

PERMITE DEFINIR CONSTANTES EN EL FICHERO `wp-config.php`. ESTAS CONSTANTES VAN A AFECTAR DIRECTAMENTE A LA SEGURIDAD DE LA APLICACIÓN WEB.

SE PUEDE HABILITAR O DESHABILITAR QUE UNA PERSONA COMO UN CRACKER PUEDA EDITAR EL CONTENIDO DEL WP SI LLEGA A ACCEDER.

SI ESTAS CONSTANTES ESTAN ACTIVADAS NOSOTROS COMO ATACANTES NO PODREMOS INYECTAR CODIGO TAN FACILMENTE AUNQUE HAIGAMOS CONSEGUIDO ACCESO COMO ADMIN.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FRE10qV7bWfsXMY339tTC%2Fimagen.png?alt=media&amp;token=24a24677-319e-4bf9-9d1f-91249368730b" alt=""><figcaption></figcaption></figure>

***

### MULTI-SITE

WP PERMITE CREAR REDES DE SITIOS EN UNA SOLA INSTALACIÓN, WP LO LLAMA EL MODO MULTI-SITE.

EN LUGAR DE CREAR OTRO WP CON OTRA DB DIFERENTE, SIMPLEMENTE SE AGREGAN NUEVAS TABLAS A LA BASE DE DATOS EXISTENTE PARA CADA SITIO DE LA RED Y COMPARTEN EL MISMO NÚCLEO, PLUGINGS Y TEMAS.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FcezUwfBDOyJbagb8Qiy4%2Fimagen.png?alt=media&amp;token=f677254d-4bfa-4dc4-8955-e68ba4a8eee9" alt=""><figcaption></figcaption></figure>
