Saltar al contenido principal
Versión: Más reciente

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']);
MiembroContrato
__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étodoEntradaEfecto
setPathScan(string $path)Ruta de archivo o directorio existenteEstablece el destino de análisis normalizado actual. Un argumento posicional pasado a run() lo anula.
setIgnorePaths(array $paths)Patrones de rutaExcluye las rutas coincidentes.
setFilterPaths(array $paths)Patrones de rutaRestringe el análisis a las rutas coincidentes.
setExtensions(array $extensions)Extensiones de archivo sin el punto inicialSustituye la lista de extensiones aptas.
setScanAll(bool $scanAll)BooleanoIncluye archivos fuera de la lista de extensiones configurada.
setMaxFilesize(int $size)BytesEstablece 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 negativoAnaliza 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étodoEfecto
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étodoEfecto
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étodoAcció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.
peligro

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.