Сканирование с 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 в каждом пакете. Успешный возврат подтверждает только завершение сканирования; он не означает, что каждый обнаруженный файл был доступен для обработки или чтения.