Scanner
AMWScan\Scanner mappa una destinazione, esegue le analisi abilitate e restituisce il report corrente. Passa la destinazione come primo argomento di run(); usa i setter per le altre configurazioni che run() non analizza di nuovo.
Costruttore e ciclo di vita
use AMWScan\Scanner;
$scanner = new Scanner();
$report = $scanner->run(['/srv/app']);
| Membro | Contratto |
|---|---|
__construct(?callable $wordpressDatabaseFactory = null) | Crea uno scanner. Ometti la factory a meno che l'integrazione non fornisca la dipendenza opzionale dello scanner del database WordPress. |
run(array $args = []) | Reimposta il report corrente, applica argomenti in stile CLI, scansiona la destinazione richiesta e restituisce stdClass. Restituisce false quando intercetta un'eccezione o l'esecuzione viene interrotta. |
isInterrupted() | Restituisce se l'esecuzione corrente o più recente è stata interrotta. |
getLastError() | Restituisce il messaggio di errore intercettato dall'esecuzione non riuscita più recente. |
getReport() | Restituisce il report corrente come stdClass; usalo dopo un'esecuzione riuscita. |
L'array opzionale $args accetta gli stessi nomi di opzione dello scanner da riga di comando. Passa sempre la destinazione come primo elemento. run() riapplica inoltre il percorso posizionale e le opzioni --max-filesize, --offset e --limit, quindi passa questi controlli tramite $args. Consulta il Riferimento CLI per nomi e vincoli dei flag.
Destinazione e selezione dei file
| Metodo | Input | Effetto |
|---|---|---|
setPathScan(string $path) | Percorso di file o directory esistente | Imposta la destinazione di scansione normalizzata corrente. Un argomento posizionale passato a run() la sostituisce. |
setIgnorePaths(array $paths) | Modelli di percorso | Esclude i percorsi corrispondenti. |
setFilterPaths(array $paths) | Modelli di percorso | Limita la scansione ai percorsi corrispondenti. |
setExtensions(array $extensions) | Estensioni dei file senza punto iniziale | Sostituisce l'elenco delle estensioni idonee. |
setScanAll(bool $scanAll) | Booleano | Include file oltre l'elenco di estensioni configurato. |
setMaxFilesize(int $size) | Byte | Imposta il limite corrente. Passa --max-filesize=<size> a run() per un limite specifico della scansione. |
setOffset(int $offset) / setLimit(int $limit) | Intero non negativo | Esegue la scansione di un sottoinsieme mappato per l'elaborazione controllata in batch. |
Convalida ogni percorso fornito da una richiesta o dal payload di un lavoro prima di passarlo all'SDK. Un'integrazione rivolta al web deve risolvere il percorso rispetto a una root di progetto consentita e rifiutare le posizioni esterne.
Ambito di rilevamento
| Metodo | Effetto |
|---|---|
enableLiteMode() / disableLiteMode() | Seleziona il set più leggero di definizioni degli exploit. |
setOnlySignaturesMode() | Abilita le firme e disabilita le scansioni di funzioni ed exploit. |
setOnlyExploitsMode() | Abilita solo la scansione degli exploit. |
setOnlyFunctionsMode() | Abilita le scansioni di firme e funzioni e disabilita quella degli exploit. |
setFunctions(array $functions) | Sostituisce le definizioni di funzioni pericolose. |
setFunctionsEncoded(array $functions) | Aggiunge le funzioni codificate fornite alle funzioni pericolose integrate. |
setExploits(array $exploits) | Sostituisce le definizioni degli exploit. |
enableChecksum() / disableChecksum() | Abilita o disabilita la verifica di integrità della piattaforma. |
enableDeobfuscateMode() / disableDeobfuscateMode() | Abilita o disabilita l'output di deoffuscamento. L'abilitazione abilita anche la scrittura del report. |
I tre metodi setOnly...Mode() si sostituiscono a vicenda nell'ambito di rilevamento. Chiama uno di essi al massimo una volta per esecuzione. Per le normali scansioni delle applicazioni, inizia con la modalità lite e un comportamento di solo report, quindi ottimizza in base ai rilevamenti esaminati.
Controlli di output ed esecuzione
| Metodo | Effetto |
|---|---|
setSilentMode(bool $enabled = true) | Disabilita i prompt interattivi. Se abilitato senza un prompt esistente, imposta il salto automatico. |
setColors(bool $enabled = true) | Abilita o disabilita i colori del terminale. |
enableLogs() / disableLogs() | Abilita o disabilita la registrazione dello scanner. |
setPathLogs(string $path) | Imposta il percorso del file di log. |
enableReport() / disableReport() | Abilita o disabilita la scrittura di un file di report. |
setPathReport(string $path) | Imposta il modello di percorso del report. |
setReportFormat(string $format) | Seleziona html, txt, text, log, logs, json, sarif o htm. I valori non validi lasciano invariato il formato precedente. |
enableCache() / disableCache() | Abilita o disabilita la cache delle scansioni. |
Imposta setSilentMode() e setAutoSkip() per scansioni di report non presidiate. Usa l'output JSON o SARIF quando un altro processo utilizza il report, ma considera il contratto del report in memoria come fonte di verità dell'integrazione.
Controlli di correzione
| Metodo | Azione automatica predefinita |
|---|---|
setAutoSkip() | Lascia invariato il rilevamento. |
setAutoClean() | Rimuove il codice corrispondente da un file. |
setAutoCleanLine() | Rimuove la riga corrispondente. |
setAutoQuarantine() | Sposta il file in quarantena. |
setAutoDelete() | Elimina il file. |
setAutoWhitelist() | Aggiunge il rilevamento alla whitelist. |
enableBackups() / setPathBackups(string $path) | Conserva un backup dei file modificati dallo scanner. |
setPathQuarantine(string $path) | Imposta la directory di quarantena. |
setPathWhitelist(string $path) | Imposta il file JSON della whitelist. |
setAutoClean(), setAutoCleanLine(), setAutoQuarantine() e setAutoDelete() modificano i file. Abilita i backup, scrivi al di fuori dell'albero scansionato e prova il flusso di lavoro su una copia del progetto prima di usare la correzione automatizzata in produzione.
Una scansione batch delimitata
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.');
}
Esamina $report->coverage in ogni batch. Un ritorno riuscito conferma solo che la scansione è stata completata; non significa che ogni file individuato fosse idoneo o leggibile.