Analizar con Scanner
AMWScan\Scanner asigna un destino, ejecuta los análisis habilitados y devuelve el informe actual. Pase el destino como primer argumento de run(); use métodos de establecimiento para otra configuración que run() no vuelve a analizar.
Constructor y ciclo de vida
use AMWScan\Scanner;
$scanner = new Scanner();
$report = $scanner->run(['/srv/app']);
| Miembro | Contrato |
|---|---|
__construct(?callable $wordpressDatabaseFactory = null) | Crea un escáner. Omita la fábrica salvo que su integración proporcione la dependencia opcional del escáner de bases de datos de WordPress. |
run(array $args = []) | Restablece el informe actual, aplica argumentos de estilo CLI, analiza el destino solicitado y devuelve stdClass. Devuelve false cuando captura una excepción o la ejecución se interrumpe. |
isInterrupted() | Devuelve si la ejecución actual o más reciente se interrumpió. |
getLastError() | Devuelve el mensaje de error capturado de la ejecución fallida más reciente. |
getReport() | Devuelve el informe actual como stdClass; úselo después de una ejecución correcta. |
La matriz opcional $args acepta los mismos nombres de opción que el escáner de línea de comandos. Pase siempre el destino como primer elemento. run() también vuelve a aplicar su ruta posicional y las opciones --max-filesize, --offset y --limit, por lo que debe pasar esos controles mediante $args. Consulte Referencia CLI para los nombres y restricciones de las opciones.
Destino y selección de archivos
| Método | Entrada | Efecto |
|---|---|---|
setPathScan(string $path) | Ruta de archivo o directorio existente | Establece el destino de análisis normalizado actual. Un argumento posicional pasado a run() lo anula. |
setIgnorePaths(array $paths) | Patrones de ruta | Excluye las rutas coincidentes. |
setFilterPaths(array $paths) | Patrones de ruta | Restringe el análisis a las rutas coincidentes. |
setExtensions(array $extensions) | Extensiones de archivo sin el punto inicial | Sustituye la lista de extensiones aptas. |
setScanAll(bool $scanAll) | Booleano | Incluye archivos fuera de la lista de extensiones configurada. |
setMaxFilesize(int $size) | Bytes | Establece el límite actual. Pase --max-filesize=<size> a run() para un límite específico del análisis. |
setOffset(int $offset) / setLimit(int $limit) | Entero no negativo | Analiza un subconjunto asignado para procesar lotes de forma controlada. |
Valide cada ruta proporcionada por una solicitud o carga útil de trabajo antes de pasarla al SDK. Una integración orientada a la web debe resolver la ruta respecto a una raíz de proyecto permitida y rechazar ubicaciones fuera de ella.
Alcance de detección
| Método | Efecto |
|---|---|
enableLiteMode() / disableLiteMode() | Selecciona el conjunto más ligero de definiciones de exploits. |
setOnlySignaturesMode() | Habilita las firmas y deshabilita los análisis de funciones y exploits. |
setOnlyExploitsMode() | Habilita únicamente el análisis de exploits. |
setOnlyFunctionsMode() | Habilita los análisis de firmas y funciones y deshabilita los de exploits. |
setFunctions(array $functions) | Sustituye las definiciones de funciones peligrosas. |
setFunctionsEncoded(array $functions) | Añade las funciones codificadas proporcionadas a las funciones peligrosas integradas. |
setExploits(array $exploits) | Sustituye las definiciones de exploits. |
enableChecksum() / disableChecksum() | Habilita o deshabilita la verificación de integridad de la plataforma. |
enableDeobfuscateMode() / disableDeobfuscateMode() | Habilita o deshabilita la salida de desofuscación. Al habilitarla también se habilita la escritura de informes. |
Los tres métodos setOnly...Mode() se sustituyen entre sí en cuanto al alcance de detección. Llame a uno de ellos como máximo una vez por análisis. Para análisis normales de aplicaciones, comience con el modo ligero y comportamiento de solo informe, y después ajuste según los hallazgos revisados.
Controles de salida y ejecución
| Método | Efecto |
|---|---|
setSilentMode(bool $enabled = true) | Deshabilita las solicitudes interactivas. Cuando se habilita sin una solicitud existente, establece la omisión automática. |
setColors(bool $enabled = true) | Habilita o deshabilita los colores de terminal. |
enableLogs() / disableLogs() | Habilita o deshabilita el registro del escáner. |
setPathLogs(string $path) | Establece la ruta del archivo de registro. |
enableReport() / disableReport() | Habilita o deshabilita la escritura de un archivo de informe. |
setPathReport(string $path) | Establece la plantilla de ruta del informe. |
setReportFormat(string $format) | Selecciona html, txt, text, log, logs, json, sarif o htm. Los valores no válidos dejan sin cambios el formato anterior. |
enableCache() / disableCache() | Habilita o deshabilita la caché del análisis. |
Establezca setSilentMode() y setAutoSkip() para análisis de informes sin supervisión. Use salida JSON o SARIF cuando otro proceso consuma el informe, pero considere el contrato del informe en memoria como fuente de verdad para la integración.
Controles de corrección
| Método | Acción automática predeterminada |
|---|---|
setAutoSkip() | Deja el hallazgo sin cambios. |
setAutoClean() | Elimina el código coincidente de un archivo. |
setAutoCleanLine() | Elimina la línea coincidente. |
setAutoQuarantine() | Mueve el archivo a cuarentena. |
setAutoDelete() | Elimina el archivo. |
setAutoWhitelist() | Añade el hallazgo a la lista de permitidos. |
enableBackups() / setPathBackups(string $path) | Conserva una copia de seguridad de los archivos que modifica el escáner. |
setPathQuarantine(string $path) | Establece el directorio de cuarentena. |
setPathWhitelist(string $path) | Establece el archivo JSON de la lista de permitidos. |
setAutoClean(), setAutoCleanLine(), setAutoQuarantine() y setAutoDelete() modifican archivos. Habilite las copias de seguridad, escriba fuera del árbol analizado y pruebe el flujo de trabajo con una copia del proyecto antes de usar corrección automatizada en producción.
Un análisis por lotes limitado
use AMWScan\Scanner;
$scanner = new Scanner();
$report = $scanner
->setIgnorePaths(['/srv/releases/current/var/cache'])
->setExtensions(['php', 'phtml', 'htaccess'])
->enableLiteMode()
->setSilentMode()
->setAutoSkip()
->run([
'/srv/releases/current',
'--max-filesize=2097152',
]);
if ($report === false) {
throw new RuntimeException($scanner->getLastError() ?: 'Scan failed.');
}
Inspeccione $report->coverage en cada lote. Una devolución correcta solo confirma que el análisis se completó; no significa que cada archivo detectado fuera apto o legible.