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.