Безопасность и состояние PHP SDK
SDK читает недоверенные файлы проекта и может изменять их при включенном устранении. Считайте сканирование привилегированной операцией с явной целью, контролируемым хранилищем и путем проверки для каждой находки.
Глобальная для процесса конфигурация
Scanner хранит свою конфигурацию и текущий отчет в статическом состоянии. Свободно связываемые методы настройки возвращают новый экземпляр Scanner, но изменяют это общее состояние процесса.
$first = new Scanner();
$second = $first->setPathScan('/srv/project-a');
// Both objects observe the same Scanner configuration.
Запускайте в каждом процессе PHP только одно сканирование одновременно. Для фоновых заданий, параллельных запросов или изоляции арендаторов используйте новый CLI-процесс. Долгоживущий воркер должен применять полную конфигурацию перед каждым запуском и не переиспользовать состояние предыдущего задания.
run() сбрасывает отчет в начале сканирования. Он не сбрасывает более широкую конфигурацию сканера. Не полагайтесь на создание объекта для восстановления значений по умолчанию.
Операции с файлами
Поведение запроса по умолчанию различается между интерактивными и тихими запусками. В автономном коде выбирайте действие явно:
$report = (new Scanner())
->setPathScan('/srv/app')
->setSilentMode()
->setAutoSkip()
->run();
Для любого действия, изменяющего файлы, вызовите enableBackups() и задайте в setPathBackups() доступный для записи каталог за пределами цели. Храните карантин, белый список, деобфускацию, отчеты, журналы, долговременные находки и контрольные точки за пределами сканируемого проекта, чтобы сканер не проверял собственный вывод.
Перед включением автоматической очистки, карантина или удаления:
- Выполните сканирование только с отчетами на типичных копиях приложения.
- Проверьте
coverage,findingsиdiagnosticsдля каждого запуска. - Протестируйте процедуры резервного копирования и восстановления под той же учетной записью, которая запускает рабочие сканирования.
- Ограничьте целевой путь утвержденными корнями проекта.
Пути и разрешения
Передавайте абсолютные пути из доверенной конфигурации. Нормализуйте и авторизуйте пути, полученные из запроса, перед вызовом setPathScan(), setPathReport() или любого другого метода настройки пути. SDK нормализует пути с помощью Path::get(), но нормализация не обеспечивает границу авторизации приложения.
Запускайте сканер с минимальным доступом к файловой системе, необходимым для чтения цели и записи контролируемого вывода. Не запускайте веб-запрос от имени учетной записи, которая может сканировать или удалять файлы за пределами предполагаемого корня развертывания.
Сетевое поведение и автономная работа
Сканирование основного кода использует встроенные определения. Проверка целостности и определения доменов Maltrail могут использовать исходящий HTTPS. Сканер хранит успешные удаленные данные в кэше операционной системы за пределами цели сканирования.
Когда среда блокирует исходящий трафик, собирайте и сохраняйте диагностику отчета. Неудачное обновление может оставить активными кэшированные определения; отчет записывает доступные метаданные в signature_indexes. Не считайте массив диагностики пустым, если сетевой маршрут отсутствует.
Политика обработки сбоев
Считайте false от run() операционной ошибкой. Считайте неполный охват, диагностику и предупреждения сигналами для проверки. Сохраняйте отчет с отметкой времени сканирования, идентификатором цели, версией сканера из Scanner::getVersion() и любым внешним идентификатором задания.
SDK предоставляет сообщения перехваченных ошибок через getLastError(). Записывайте их в защищенный журнал приложения. Не предоставляйте недоверенным пользователям целевые пути, содержимое отчетов или необработанный текст ошибок.