Aller au contenu principal
Version: v0.20

Analyser avec Scanner

AMWScan\Scanner associe une cible, exécute les analyses activées et renvoie le rapport actuel. Passez la cible comme premier argument de run() ; utilisez les setters pour toute autre configuration que run() ne réanalyse pas.

Constructeur et cycle de vie

use AMWScan\Scanner;

$scanner = new Scanner();
$report = $scanner->run(['/srv/app']);
MembreContrat
__construct(?callable $wordpressDatabaseFactory = null)Crée un scanner. Omettez la fabrique, sauf si votre intégration fournit la dépendance facultative du scanner de base de données WordPress.
run(array $args = [])Réinitialise le rapport actuel, applique des arguments de type CLI, analyse la cible demandée et renvoie stdClass. Renvoie false lorsqu'une exception est interceptée ou que l'exécution est interrompue.
isInterrupted()Indique si l'analyse actuelle ou la plus récente a été interrompue.
getLastError()Renvoie le message d'erreur intercepté lors de la dernière exécution échouée.
getReport()Renvoie le rapport actuel sous forme de stdClass ; utilisez-le après une exécution réussie.

Le tableau $args facultatif accepte les mêmes noms d'options que le scanner en ligne de commande. Passez toujours la cible comme premier élément. run() réapplique également son chemin positionnel ainsi que les options --max-filesize, --offset et --limit ; passez donc ces contrôles par $args. Consultez la Référence CLI pour les noms et contraintes des indicateurs.

Cible et sélection de fichiers

MéthodeEntréeEffet
setPathScan(string $path)Chemin d'un fichier ou répertoire existantDéfinit la cible d'analyse normalisée actuelle. Un argument positionnel passé à run() l'emporte.
setIgnorePaths(array $paths)Modèles de cheminsExclut les chemins correspondants.
setFilterPaths(array $paths)Modèles de cheminsLimite l'analyse aux chemins correspondants.
setExtensions(array $extensions)Extensions de fichiers sans le point initialRemplace la liste des extensions éligibles.
setScanAll(bool $scanAll)BooléenInclut les fichiers hors de la liste d'extensions configurée.
setMaxFilesize(int $size)OctetsDéfinit la limite actuelle. Passez --max-filesize=<size> à run() pour une limite propre à l'analyse.
setOffset(int $offset) / setLimit(int $limit)Entier non négatifAnalyse un sous-ensemble mappé pour un traitement par lots contrôlé.

Validez chaque chemin fourni par une requête ou la charge utile d'une tâche avant de le transmettre au SDK. Une intégration accessible sur le web doit résoudre le chemin par rapport à une racine de projet autorisée et rejeter les emplacements qui en sortent.

Portée de la détection

MéthodeEffet
enableLiteMode() / disableLiteMode()Sélectionne l'ensemble plus léger de définitions d'exploits.
setOnlySignaturesMode()Active les signatures et désactive les analyses de fonctions et d'exploits.
setOnlyExploitsMode()Active uniquement l'analyse des exploits.
setOnlyFunctionsMode()Active les analyses de signatures et de fonctions, et désactive l'analyse des exploits.
setFunctions(array $functions)Remplace les définitions de fonctions dangereuses.
setFunctionsEncoded(array $functions)Ajoute les fonctions encodées fournies aux fonctions dangereuses intégrées.
setExploits(array $exploits)Remplace les définitions d'exploits.
enableChecksum() / disableChecksum()Active ou désactive la vérification d'intégrité de la plateforme.
enableDeobfuscateMode() / disableDeobfuscateMode()Active ou désactive la sortie de désobfuscation. Son activation active également l'écriture de rapports.

Les trois méthodes setOnly...Mode() remplacent mutuellement leur portée de détection. Appelez-en au plus une par analyse. Pour des analyses d'applications normales, commencez par le mode léger et un comportement de rapport uniquement, puis ajustez selon les résultats examinés.

Contrôles de sortie et d'exécution

MéthodeEffet
setSilentMode(bool $enabled = true)Désactive les invites interactives. Lorsqu'elle est activée sans invite existante, définit l'ignorance automatique.
setColors(bool $enabled = true)Active ou désactive les couleurs du terminal.
enableLogs() / disableLogs()Active ou désactive la journalisation du scanner.
setPathLogs(string $path)Définit le chemin du fichier journal.
enableReport() / disableReport()Active ou désactive l'écriture d'un fichier de rapport.
setPathReport(string $path)Définit le modèle de chemin du rapport.
setReportFormat(string $format)Sélectionne html, txt, text, log, logs, json, sarif ou htm. Les valeurs non valides laissent le format précédent inchangé.
enableCache() / disableCache()Active ou désactive la mise en cache des analyses.

Définissez setSilentMode() et setAutoSkip() pour les analyses de rapports sans surveillance. Utilisez une sortie JSON ou SARIF lorsqu'un autre processus consomme le rapport, mais considérez le contrat du rapport en mémoire comme la source de vérité de l'intégration.

Contrôles de remédiation

MéthodeAction automatique par défaut
setAutoSkip()Laisse la détection inchangée.
setAutoClean()Supprime le code correspondant d'un fichier.
setAutoCleanLine()Supprime la ligne correspondante.
setAutoQuarantine()Place le fichier en quarantaine.
setAutoDelete()Supprime le fichier.
setAutoWhitelist()Ajoute la détection à la liste blanche.
enableBackups() / setPathBackups(string $path)Conserve une sauvegarde des fichiers modifiés par le scanner.
setPathQuarantine(string $path)Définit le répertoire de quarantaine.
setPathWhitelist(string $path)Définit le fichier JSON de liste blanche.
danger

setAutoClean(), setAutoCleanLine(), setAutoQuarantine() et setAutoDelete() modifient des fichiers. Activez les sauvegardes, écrivez hors de l'arborescence analysée et testez le flux de travail sur une copie du projet avant d'utiliser une remédiation automatisée en production.

Analyse par lots limitée

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.');
}

Examinez $report->coverage pour chaque lot. Un retour réussi confirme uniquement que l'analyse s'est achevée ; il ne signifie pas que tous les fichiers découverts étaient éligibles ou lisibles.