Перейти к основному содержимому
Версия: Текущая

Сканирование с Scanner

AMWScan\Scanner сопоставляет цель, запускает включенные анализы и возвращает текущий отчет. Передайте цель первым аргументом run(); для остальных параметров конфигурации, которые run() повторно не разбирает, используйте методы настройки.

Конструктор и жизненный цикл

use AMWScan\Scanner;

$scanner = new Scanner();
$report = $scanner->run(['/srv/app']);
ЧленКонтракт
__construct(?callable $wordpressDatabaseFactory = null)Создает сканер. Не указывайте фабрику, если интеграция не предоставляет необязательную зависимость сканера базы данных WordPress.
run(array $args = [])Сбрасывает текущий отчет, применяет аргументы в стиле CLI, сканирует запрошенную цель и возвращает stdClass. Возвращает false, если перехватывает исключение или запуск прерывается.
isInterrupted()Возвращает, был ли прерван текущий или последний запуск.
getLastError()Возвращает сообщение перехваченной ошибки последнего неудачного запуска.
getReport()Возвращает текущий отчет как stdClass; используйте после успешного запуска.

Необязательный массив $args принимает те же имена параметров, что и сканер командной строки. Всегда передавайте цель первым элементом. run() также повторно применяет позиционный путь, а также параметры --max-filesize, --offset и --limit, поэтому передавайте эти элементы управления через $args. Имена и ограничения флагов смотрите в Справочнике CLI.

Цель и выбор файлов

МетодВходные данныеЭффект
setPathScan(string $path)Путь к существующему файлу или каталогуЗадает текущую нормализованную цель сканирования. Позиционный аргумент, переданный в run(), имеет приоритет.
setIgnorePaths(array $paths)Шаблоны путейИсключает соответствующие пути.
setFilterPaths(array $paths)Шаблоны путейОграничивает сканирование соответствующими путями.
setExtensions(array $extensions)Расширения файлов без начальной точкиЗаменяет список подходящих расширений.
setScanAll(bool $scanAll)Логическое значениеВключает файлы помимо настроенного списка расширений.
setMaxFilesize(int $size)БайтыУстанавливает текущий лимит. Для лимита конкретного сканирования передайте в run() --max-filesize=<size>.
setOffset(int $offset) / setLimit(int $limit)Неотрицательное целое числоСканирует сопоставленное подмножество для контролируемой пакетной обработки.

Проверяйте каждый путь, полученный из запроса или полезной нагрузки задания, до передачи в SDK. Веб-интеграция должна разрешать путь относительно разрешенного корня проекта и отклонять расположения за его пределами.

Область обнаружения

МетодЭффект
enableLiteMode() / disableLiteMode()Выбирает облегченный набор определений эксплойтов.
setOnlySignaturesMode()Включает сигнатуры и отключает сканирование функций и эксплойтов.
setOnlyExploitsMode()Включает только сканирование эксплойтов.
setOnlyFunctionsMode()Включает сканирование сигнатур и функций и отключает сканирование эксплойтов.
setFunctions(array $functions)Заменяет определения опасных функций.
setFunctionsEncoded(array $functions)Добавляет предоставленные закодированные функции к встроенным опасным функциям.
setExploits(array $exploits)Заменяет определения эксплойтов.
enableChecksum() / disableChecksum()Включает или отключает проверку целостности платформы.
enableDeobfuscateMode() / disableDeobfuscateMode()Включает или отключает вывод деобфускации. Включение также включает запись отчета.

Три метода setOnly...Mode() заменяют область обнаружения друг друга. Вызывайте не более одного из них за запуск. Для обычного сканирования приложений начните с облегченного режима и поведения только отчетов, затем настройте по проверенным находкам.

Управление выводом и выполнением

МетодЭффект
setSilentMode(bool $enabled = true)Отключает интерактивные запросы. Если включен без существующего запроса, задает автоматический пропуск.
setColors(bool $enabled = true)Включает или отключает цвета терминала.
enableLogs() / disableLogs()Включает или отключает журналирование сканера.
setPathLogs(string $path)Задает путь к файлу журнала.
enableReport() / disableReport()Включает или отключает запись файла отчета.
setPathReport(string $path)Задает шаблон пути к отчету.
setReportFormat(string $format)Выбирает html, txt, text, log, logs, json, sarif или htm. Недопустимые значения оставляют предыдущий формат без изменений.
enableCache() / disableCache()Включает или отключает кэширование сканирования.

Для автономного сканирования отчетов задайте setSilentMode() и setAutoSkip(). Используйте вывод JSON или SARIF, когда отчет обрабатывает другой процесс, но считайте контракт отчета в памяти источником истины для интеграции.

Элементы управления устранением

МетодАвтоматическое действие по умолчанию
setAutoSkip()Оставляет находку без изменений.
setAutoClean()Удаляет совпавший код из файла.
setAutoCleanLine()Удаляет совпадающую строку.
setAutoQuarantine()Перемещает файл в карантин.
setAutoDelete()Удаляет файл.
setAutoWhitelist()Добавляет находку в белый список.
enableBackups() / setPathBackups(string $path)Сохраняет резервную копию файлов, изменяемых сканером.
setPathQuarantine(string $path)Задает каталог карантина.
setPathWhitelist(string $path)Задает JSON-файл белого списка.
осторожно

setAutoClean(), setAutoCleanLine(), setAutoQuarantine() и setAutoDelete() изменяют файлы. Включите резервное копирование, записывайте данные за пределами сканируемого дерева и протестируйте рабочий процесс на копии проекта перед использованием автоматического устранения в рабочей среде.

Ограниченное пакетное сканирование

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

Проверяйте $report->coverage в каждом пакете. Успешный возврат подтверждает только завершение сканирования; он не означает, что каждый обнаруженный файл был доступен для обработки или чтения.