> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/hacking-tools/web/php-security-scanner.md).

# Escáner de seguridad PHP

PHP Security Scanner es una herramienta de revisión estática exclusiva para suscriptores que encuentra funciones PHP peligrosas, configuraciones débiles, rutas riesgosas de origen a destino e indicadores de escalada de privilegios en aplicaciones PHP.

Use el buscador de funciones como la vista principal de triaje: busque por nombre de función, categoría, impacto o severidad.

## Buscador de funciones

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Función / Patrón</th><th>Categoría</th><th>Severidad</th><th>Impacto</th><th>Verificación del escáner</th><th>Solución</th></tr></thead><tbody><tr><td><code>system()</code></td><td>Ejecución de comandos</td><td>Crítica</td><td>Ejecución remota de código como usuario web</td><td>Marque cadenas de comandos contaminadas, interpolación, concatenación y argumentos controlados por el usuario.</td><td>Use APIs nativas de PHP o comandos y argumentos estrictamente permitidos en listas.</td></tr><tr><td><code>exec()</code></td><td>Ejecución de comandos</td><td>Crítica</td><td>Ejecución remota de código, captura de salida de comandos</td><td>Compruebe si la entrada de request, cookie, base de datos, archivo o CLI llega al comando.</td><td>Elimine el uso de la shell o aísle comandos fijos detrás de listas permitidas.</td></tr><tr><td><code>shell_exec()</code></td><td>Ejecución de comandos</td><td>Crítica</td><td>Ejecución remota de código con salida devuelta</td><td>Detecte la construcción dinámica de comandos y la salida renderizada en respuestas.</td><td>Reemplace por llamadas seguras a bibliotecas.</td></tr><tr><td><code>passthru()</code></td><td>Ejecución de comandos</td><td>Crítica</td><td>Ejecución remota de código con salida en bruto</td><td>Escale cuando sea accesible desde rutas web o procesamiento de archivos.</td><td>Evite llamadas a la shell; valide conjuntos de entrada fijos.</td></tr><tr><td><code>proc_open()</code></td><td>Control de procesos</td><td>Crítica</td><td>Ejecución remota de código, interacción con procesos</td><td>Revise el comando, la especificación de descriptores, el entorno y el directorio de trabajo.</td><td>Use trabajadores restringidos y plantillas de comandos fijas.</td></tr><tr><td><code>popen()</code></td><td>Control de procesos</td><td>Crítica</td><td>Ejecución remota de código a través de flujo de proceso</td><td>Marque cadenas de comandos contaminadas y lecturas de flujo.</td><td>Reemplace con APIs de flujo/archivo de PHP cuando sea posible.</td></tr><tr><td><code>pcntl_exec()</code></td><td>Control de procesos</td><td>Crítica</td><td>Reemplazo de proceso, riesgo de escalada de privilegios</td><td>Escale en contextos de CLI, cron, SUID, sudo y workers.</td><td>Elimine las rutas de ejecución privilegiadas del intérprete.</td></tr><tr><td><code>`comillas invertidas`</code></td><td>Ejecución de comandos</td><td>Crítica</td><td>Ejecución oculta de shell</td><td>Detecte la interpolación de variables dentro de expresiones con comillas invertidas.</td><td>Reemplace por APIs seguras explícitas.</td></tr><tr><td><code>eval()</code></td><td>Ejecución de código</td><td>Crítica</td><td>Ejecución arbitraria de código PHP</td><td>Marque todo uso; escale cuando la cadena evaluada sea dinámica.</td><td>Use cierres, analizadores, mapas de despacho fijos o plantillas seguras.</td></tr><tr><td><code>assert()</code></td><td>Ejecución de código</td><td>Alta</td><td>Riesgo heredado de ejecución de código</td><td>Marque las aserciones de cadenas en bases de código PHP antiguas.</td><td>Use solo aserciones booleanas; elimine cadenas dinámicas.</td></tr><tr><td><code>create_function()</code></td><td>Ejecución de código</td><td>Alta</td><td>Código evaluado heredado</td><td>Detecte complementos antiguos y código de compatibilidad con PHP 5/7.</td><td>Reemplace por funciones anónimas.</td></tr><tr><td><code>preg_replace()</code> por <code>/e</code></td><td>Ejecución de código</td><td>Alta</td><td>Sustitución evaluada heredada</td><td>Marque la evaluación heredada de sustituciones de expresiones regulares.</td><td>Utilice <code>preg_replace_callback()</code>.</td></tr><tr><td><code>mb_ereg_replace()</code> por <code>e</code></td><td>Ejecución de código</td><td>Alta</td><td>Riesgo de sustitución evaluada</td><td>Revise los patrones dinámicos y los valores de reemplazo.</td><td>Use lógica segura para callbacks sin evaluación.</td></tr><tr><td><code>include</code></td><td>Inclusión de archivos</td><td>Crítica</td><td>LFI/RFI hasta ejecución de código</td><td>Marque rutas controladas por el usuario, wrappers y trucos de extensiones.</td><td>Asigne las elecciones del usuario a archivos fijos.</td></tr><tr><td><code>include_once</code></td><td>Inclusión de archivos</td><td>Crítica</td><td>LFI/RFI hasta ejecución de código</td><td>Compruebe rutas de include dinámicas y efectos secundarios del autoload.</td><td>Use mapas de include fijos y rutas canónicas.</td></tr><tr><td><code>require</code></td><td>Inclusión de archivos</td><td>Crítica</td><td>Ejecución de código de la aplicación</td><td>Escale cuando la ruta contenga datos de la request.</td><td>Rechace la entrada dinámica del sistema de archivos.</td></tr><tr><td><code>require_once</code></td><td>Inclusión de archivos</td><td>Crítica</td><td>Ejecución de código de la aplicación</td><td>Revise cargadores del framework, cargadores de plugins y rutas de plantillas.</td><td>Use solo módulos permitidos en la lista.</td></tr><tr><td><code>file_get_contents()</code></td><td>Lectura de archivo / red</td><td>Alta</td><td>LFI, SSRF, divulgación de secretos</td><td>Marque rutas, URL y <code>php://input</code> análisis.</td><td>Canonicalice las rutas y bloquee esquemas riesgosos.</td></tr><tr><td><code>readfile()</code></td><td>Lectura de archivos</td><td>Alta</td><td>Divulgación directa de archivos</td><td>Detecte traversal de rutas y controladores de descarga pública.</td><td>Sirva archivos por ID desde directorios aprobados.</td></tr><tr><td><code>fopen()</code></td><td>Acceso a archivos / red</td><td>Alta</td><td>LFI, SSRF, escritura arbitraria</td><td>Rastree el modo, el origen de la ruta y los wrappers de URL.</td><td>Valide el esquema, el modo y la ruta canónica.</td></tr><tr><td><code>file()</code></td><td>Lectura de archivos</td><td>Alta</td><td>Divulgación de archivos basada en líneas</td><td>Marque nombres de archivo controlados por el usuario.</td><td>Use rutas de almacenamiento fijas y comprobaciones de límites.</td></tr><tr><td><code>SplFileObject</code></td><td>Acceso a archivos</td><td>Alta</td><td>LFI, traversal de rutas</td><td>Detecte argumentos dinámicos del constructor.</td><td>Aplicar <code>realpath()</code> aplicación de límites.</td></tr><tr><td><code>file_put_contents()</code></td><td>Escritura de archivos</td><td>Crítica</td><td>Web shell, sobrescritura, envenenamiento de configuración</td><td>Escale cuando el nombre de archivo y el contenido estén contaminados o la ruta sea pública.</td><td>Genere nombres de archivo y escriba fuera de la raíz web.</td></tr><tr><td><code>fwrite()</code></td><td>Escritura de archivos</td><td>Alta</td><td>Modificación arbitraria de archivos</td><td>Rastree el origen del manejador desde <code>fopen()</code>.</td><td>Restrinja los directorios escribibles y los tipos de archivo.</td></tr><tr><td><code>copy()</code></td><td>Escritura / movimiento de archivos</td><td>Alta</td><td>Colocación o sobrescritura de archivos</td><td>Compruebe la contaminación del origen y del destino.</td><td>Use destinos fijos y nombres seguros frente a colisiones.</td></tr><tr><td><code>rename()</code></td><td>Movimiento de archivos</td><td>Alta</td><td>Bypass de subida, sobrescritura</td><td>Marque rutas de destino controladas por el usuario.</td><td>Use nombres de almacenamiento generados.</td></tr><tr><td><code>unlink()</code></td><td>Eliminación de archivos</td><td>Alta</td><td>Eliminación arbitraria de archivos</td><td>Detecte rutas contaminadas y traversal.</td><td>Elimine por ID de objeto, no por ruta bruta.</td></tr><tr><td><code>chmod()</code></td><td>Permisos</td><td>Alta</td><td>Debilitamiento de privilegios</td><td>Marque modos amplios como <code>0777</code> y rutas contaminadas.</td><td>Use modos de mínimo privilegio y rutas fijas.</td></tr><tr><td><code>chown()</code> / <code>chgrp()</code></td><td>Propiedad</td><td>Alta</td><td>Manipulación de privilegios</td><td>Revise scripts de despliegue y administración.</td><td>No exponga cambios de propiedad a la entrada de la aplicación.</td></tr><tr><td><code>mkdir()</code></td><td>Sistema de archivos</td><td>Media</td><td>Traversal de rutas, permisos débiles</td><td>Marque rutas dinámicas y modos permisivos.</td><td>Normalice las rutas y establezca permisos estrictos.</td></tr><tr><td><code>touch()</code></td><td>Sistema de archivos</td><td>Media</td><td>Creación de archivos, abuso de marcas de tiempo</td><td>Escale en cron o directorios privilegiados.</td><td>Use rutas fijas y comprobaciones de propiedad.</td></tr><tr><td><code>unserialize()</code></td><td>Deserialización</td><td>Crítica</td><td>Inyección de objetos PHP</td><td>Marque todo uso con datos de request, cookie, subida, base de datos, caché o cola.</td><td>Use JSON o restrinja <code>allowed_classes</code>.</td></tr><tr><td><code>Phar</code> / <code>phar://</code></td><td>Deserialización</td><td>Alta</td><td>Inyección de objetos desencadenada por metadatos</td><td>Marque las <code>phar://</code> rutas aceptadas y las funciones de archivo que tocan subidas.</td><td>Bloquee wrappers y evite rutas de metadatos que contengan objetos.</td></tr><tr><td><code>__wakeup()</code></td><td>Método mágico</td><td>Alta</td><td>Gadget de inyección de objetos</td><td>Revise acciones de archivo, SQL, comandos y red.</td><td>Mantenga los métodos mágicos sin efectos secundarios.</td></tr><tr><td><code>__destruct()</code></td><td>Método mágico</td><td>Alta</td><td>Gadget de inyección de objetos</td><td>Escale si elimina, escribe, incluye o ejecuta.</td><td>Evite efectos secundarios peligrosos del destructor.</td></tr><tr><td><code>__toString()</code></td><td>Método mágico</td><td>Media</td><td>Ejecución implícita de gadget</td><td>Compruebe el renderizado de plantillas y las rutas de registro.</td><td>Mantenga puros los métodos de conversión.</td></tr><tr><td><code>curl_exec()</code></td><td>Red / SSRF</td><td>Alta</td><td>SSRF, acceso a servicios internos</td><td>Rastree la URL, redirecciones, encabezados, proxy y opciones de protocolo.</td><td>Permita hosts en lista blanca y bloquee rangos privados.</td></tr><tr><td><code>fsockopen()</code></td><td>Red</td><td>Alta</td><td>Acceso bruto a la red interna</td><td>Marque valores dinámicos de host y puerto.</td><td>Restrinja destinos y salida.</td></tr><tr><td><code>pfsockopen()</code></td><td>Red</td><td>Alta</td><td>Acceso persistente a la red interna</td><td>Revise conexiones de servicios de larga duración.</td><td>Use puntos finales fijos.</td></tr><tr><td><code>stream_socket_client()</code></td><td>Red</td><td>Alta</td><td>SSRF y abuso de protocolos</td><td>Marque esquemas, hosts y puertos dinámicos.</td><td>Use destinos de red permitidos en la lista.</td></tr><tr><td><code>SoapClient</code></td><td>Red</td><td>Media</td><td>Solicitudes de estilo SSRF</td><td>Revise valores dinámicos de WSDL y del endpoint.</td><td>Use WSDL fijos y bloquee redirecciones.</td></tr><tr><td><code>mysqli_query()</code></td><td>errores</td><td>Alta</td><td>Inyección SQL</td><td>Marque SQL concatenado o interpolado.</td><td>Use declaraciones preparadas.</td></tr><tr><td><code>mysqli_multi_query()</code></td><td>errores</td><td>Alta</td><td>Inyección SQL apilada</td><td>Escale consultas dinámicas de múltiples sentencias.</td><td>Evite APIs multiquery para datos influidos por el usuario.</td></tr><tr><td><code>PDO::query()</code></td><td>errores</td><td>Alta</td><td>Inyección SQL</td><td>Marque cadenas de consulta brutas que contengan variables.</td><td>Utilice <code>prepare()</code> y parámetros enlazados.</td></tr><tr><td><code>PDO::exec()</code></td><td>errores</td><td>Alta</td><td>Inyección SQL o SQL destructivo</td><td>Revise acciones de administración y migraciones.</td><td>Use declaraciones parametrizadas.</td></tr><tr><td><code>call_user_func()</code></td><td>Despacho dinámico</td><td>Alta</td><td>Abuso de callback</td><td>Marque nombres de callback contaminados.</td><td>Use mapas de despacho fijos.</td></tr><tr><td><code>call_user_func_array()</code></td><td>Despacho dinámico</td><td>Alta</td><td>Abuso de callback con argumentos dinámicos</td><td>Rastree el callback y el origen de los argumentos.</td><td>Use manejadores explícitos y entradas tipadas.</td></tr><tr><td><code>$fn()</code></td><td>Función variable</td><td>Alta</td><td>Despacho arbitrario de funciones</td><td>Marque nombres de función procedentes de la request o de datos de la base de datos.</td><td>Asigne nombres a funciones fijas.</td></tr><tr><td><code>$object->$method()</code></td><td>Método dinámico</td><td>Alta</td><td>Abuso del despacho de métodos</td><td>Marque nombres de método procedentes de la entrada.</td><td>Use mapas de métodos permitidos en la lista.</td></tr><tr><td><code>ReflectionFunction</code></td><td>Reflexión</td><td>Media</td><td>Invocación dinámica</td><td>Revise los nombres reflejados y la invocación.</td><td>Restrinja la reflexión a herramientas internas.</td></tr><tr><td><code>register_shutdown_function()</code></td><td>Callback diferido</td><td>Media</td><td>Ruta de ejecución oculta</td><td>Marque callbacks y argumentos dinámicos.</td><td>Use callbacks fijos explícitos.</td></tr><tr><td><code>move_uploaded_file()</code></td><td>Sube</td><td>Alta</td><td>Web shell, sobrescritura, traversal de rutas</td><td>Compruebe la ruta de destino, la lógica de extensiones, el almacenamiento público y el uso del nombre de archivo original.</td><td>Cambie el nombre de los archivos, permita extensiones en lista blanca y almacene fuera de la raíz web.</td></tr><tr><td><code>getimagesize()</code></td><td>Validación de subidas</td><td>Media</td><td>Validación de contenido débil</td><td>Marque cuando se use como la única validación de subida.</td><td>Combine controles de extensión, MIME, contenido y almacenamiento.</td></tr><tr><td><code>ZipArchive::extractTo()</code></td><td>Extracción de archivos</td><td>Alta</td><td>Zip slip, escritura arbitraria</td><td>Compruebe los nombres de las entradas del archivo y el directorio de extracción.</td><td>Canonicalice cada ruta extraída.</td></tr><tr><td><code>phpinfo()</code></td><td>Divulgación de información</td><td>Media</td><td>Fuga de configuración, rutas, módulos y entorno</td><td>Marque si es accesible fuera del desarrollo local.</td><td>Elimínelo de producción.</td></tr><tr><td><code>var_dump()</code> / <code>print_r()</code></td><td>Salida de depuración</td><td>Baja</td><td>Fuga de datos y secretos</td><td>Escale cuando se use en respuestas o rutas de excepción.</td><td>Use registros estructurados con redacción.</td></tr><tr><td><code>debug_backtrace()</code></td><td>Salida de depuración</td><td>Media</td><td>Divulgación de rutas y argumentos</td><td>Revise los manejadores de errores y las rutas de depuración.</td><td>Desactive la salida de depuración detallada en producción.</td></tr></tbody></table>

## Buscador de configuración

<table data-view="cards" data-full-width="true" data-search="true"><thead><tr><th>Directiva</th><th>Severidad</th><th>Riesgo</th><th>Verificación del escáner</th></tr></thead><tbody><tr><td><code>disable_functions</code></td><td>Alta</td><td>Las funciones de ejecución peligrosas siguen disponibles.</td><td>Informe de endurecimiento faltante o incompleto, especialmente cuando existen sumideros de comandos.</td></tr><tr><td><code>open_basedir</code></td><td>Media</td><td>PHP puede acceder a rutas más amplias del sistema de archivos.</td><td>Marque valores ausentes, vacíos o excesivamente amplios.</td></tr><tr><td><code>allow_url_fopen</code></td><td>Media</td><td>Las APIs de archivos pueden obtener URL.</td><td>Escale lecturas de archivos basadas en URL y funciones propensas a SSRF.</td></tr><tr><td><code>allow_url_include</code></td><td>Crítica</td><td>Los includes dinámicos pueden cargar recursos remotos.</td><td>Crítico cuando está habilitado con rutas de include dinámicas.</td></tr><tr><td><code>display_errors</code></td><td>Media</td><td>Las trazas de pila, rutas y secretos pueden filtrarse.</td><td>Marque configuraciones de producción habilitadas.</td></tr><tr><td><code>expose_php</code></td><td>Baja</td><td>Divulgación de la versión de PHP.</td><td>Se recomienda desactivarlo en producción.</td></tr><tr><td><code>file_uploads</code></td><td>Información</td><td>Existe superficie de ataque de subida.</td><td>Combínelo con comprobaciones de ruta de subida, tamaño, extensión y validación de contenido.</td></tr><tr><td><code>upload_max_filesize</code></td><td>Media</td><td>Subidas de tamaño excesivo y abuso de almacenamiento.</td><td>Marque valores mayores de los que requiere la aplicación.</td></tr><tr><td><code>session.cookie_httponly</code></td><td>Media</td><td>El robo de cookies de sesión mediante scripts del lado del cliente es más fácil.</td><td>Se recomienda habilitarlo.</td></tr><tr><td><code>session.cookie_secure</code></td><td>Media</td><td>Las cookies pueden enviarse por HTTP.</td><td>Se recomienda habilitarlo en sitios HTTPS.</td></tr><tr><td><code>session.cookie_samesite</code></td><td>Baja</td><td>La exposición a CSRF puede aumentar.</td><td>Se recomienda especificar <code>Laxo</code> o <code>Estricto</code>.</td></tr></tbody></table>

## Entradas de origen a destino

| Origen              | Ejemplos                                                                |
| ------------------- | ----------------------------------------------------------------------- |
| Solicitud           | `$_GET`, `$_POST`, `$_REQUEST`                                          |
| Cookies / sesiones  | `$_COOKIE`, valores de sesión                                           |
| Cargas              | `$_FILES`, nombres de archivo originales, rutas temporales              |
| Encabezados         | `$_SERVER['HTTP_*']`, `getallheaders()`                                 |
| Cuerpo sin procesar | `php://input`, JSON/XML decodificado                                    |
| CLI / trabajadores  | `$argv`, `STDIN`, variables de entorno                                  |
| Datos almacenados   | Filas de base de datos, entradas de caché, colas, columnas serializadas |
| Archivos locales    | Archivos de configuración, importaciones CSV, archivos temporales       |

## IDs de regla

| ID de regla        | Severidad | Significado                                                                                         |
| ------------------ | --------- | --------------------------------------------------------------------------------------------------- |
| `PHP-CMD-001`      | Crítica   | La entrada contaminada llega a la ejecución de comandos.                                            |
| `PHP-EVAL-001`     | Crítica   | La entrada contaminada llega a la evaluación de código PHP.                                         |
| `PHP-INCL-001`     | Crítica   | La entrada contaminada controla rutas include/require.                                              |
| `PHP-DESER-001`    | Crítica   | La entrada contaminada llega a `unserialize()`.                                                     |
| `PHP-WRITE-001`    | Crítica   | Una escritura de archivo controlada por el usuario llega a una ruta ejecutable o pública.           |
| `PHP-UPLOAD-001`   | Alta      | La validación o el almacenamiento de cargas puede permitir archivos ejecutables.                    |
| `PHP-SSRF-001`     | Alta      | Una URL contaminada llega a destinos HTTP, stream, socket o cURL.                                   |
| `PHP-SQL-001`      | Alta      | La entrada contaminada llega a SQL en bruto.                                                        |
| `PHP-PATH-001`     | Alta      | Una ruta contaminada llega a la lógica de lectura, escritura, eliminación o movimiento de archivos. |
| `PHP-CALLBACK-001` | Alta      | Un nombre de función o método contaminado llega a despacho dinámico.                                |
| `PHP-CONFIG-001`   | Alta      | Una configuración peligrosa de PHP aumenta la explotabilidad.                                       |
| `PHP-PRIV-001`     | Crítica   | La ejecución de PHP tiene contexto SUID, sudo, cron o privilegiado.                                 |

## Triaje rápido

| Pregunta                                                                         | Aumento de severidad                 |
| -------------------------------------------------------------------------------- | ------------------------------------ |
| ¿Pueden los datos de la solicitud llegar a la función?                           | Elevar a Alta o Crítica.             |
| ¿La función ejecuta comandos, código PHP, includes o deserialización?            | Crítica.                             |
| ¿Toca archivos bajo la raíz web?                                                 | Alta o Crítica.                      |
| ¿Acepta URLs, wrappers, hosts o puertos?                                         | Alta.                                |
| ¿Se ejecuta desde cron, sudo, SUID, trabajadores o hooks de despliegue?          | Crítica.                             |
| ¿La validación se basa en listas de bloqueo, solo en extensiones o solo en MIME? | Subir un nivel.                      |
| ¿El valor se selecciona de una lista de permitidos estricta?                     | Reducir la confianza o la severidad. |

## Señales de escalada de privilegios

| Señal                                                         | Riesgo                                                                              |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| Binario PHP SUID                                              | PHP puede ejecutarse con privilegios elevados del propietario del archivo.          |
| La regla de sudo permite PHP                                  | El usuario puede ejecutar PHP como otro usuario.                                    |
| Un cron propiedad de root ejecuta PHP escribible              | Un script escribible puede convertirse en una ejecución privilegiada.               |
| Raíz web escribible                                           | Un error de escritura o carga de archivos puede convertirse en ejecución de código. |
| Secretos legibles por todos                                   | Las credenciales de la aplicación pueden permitir movimiento lateral.               |
| Los scripts de Composer se ejecutan como usuario privilegiado | La ejecución de dependencias o scripts puede afectar al despliegue.                 |

## Plantilla de informe

```json
{
  "id": "PHP-CMD-001",
  "severity": "crítica",
  "function": "shell_exec",
  "file": "app/Controllers/ReportController.php",
  "line": 84,
  "source": "$_POST['format']",
  "impact": "Ejecución remota de comandos como el usuario del servidor web",
  "fix": "Reemplaza la ejecución de comandos con una biblioteca nativa de PHP o argumentos estrictamente de una lista de permitidos."
}
```

## Lista de comprobación del escáner

* Analizar `.php`, `.inc`, `.phtml`, `.module`, `.theme`, rutas del framework, controladores, trabajos y scripts de CLI.
* Rastrea entradas de solicitud, cookie, carga, encabezado, cuerpo sin procesar, CLI, entorno, base de datos, caché, cola y archivos.
* Detecta destinos de ejecución de comandos, ejecución de código, include, archivos, red, SQL, deserialización, carga, callback, depuración y configuración.
* Puntúa los hallazgos con alcanzabilidad, saneamiento, versión de PHP, configuración, raíz web, permisos y contexto de ejecución.
* Exporta el nombre de la función, categoría, severidad, origen, destino, archivo, línea, impacto, confianza y corrección.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/hacking-tools/web/php-security-scanner.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
