Checkpoint від Andrea Pollastri — це інструмент для розробки, який сканує Laravel-додатки на наявність проблем із безпекою за допомогою однієї команди Artisan. Пакет виконує 26 перевірок: від аудиту вразливостей (CVE) у залежностях до пошуку вразливостей до ін'єкцій у вихідному коді. У разі виявлення помилок команда повертає ненульовий код виходу, що дозволяє використовувати її перед розгортанням (deploy).
Встановіть пакет як dev-залежність і запустіть сканування:
composer require --dev andreapollastri/checkpoint
php artisan checkpoint:scan
Пакет автоматично реєструє свій Service Provider. Він сумісний із PHP 8.1+ та підтримує Laravel версій від 8 до 13.
# Що саме перевіряє сканер
26 перевірок розділені на кілька груп. У частині залежностей Checkpoint використовує composer audit та npm audit для виявлення відомих CVE, позначає пакети, опубліковані за останні кілька днів (часта ознака шкідливого ПЗ), і шукає підозрілі записи в автозавантажувачі vendor.
У вихідному коді інструмент шукає конструкції, що потенційно створюють вразливості: сирі запити з інтерполяцією змінних, неекранований вивід Blade, ін'єкції команд через такі функції, як exec та shell_exec, Path Traversal в операціях із файлами, SSRF у вихідних HTTP-запитах, небезпечну десеріалізацію та відкриті редиректи.
Третя група перевіряє конфігурацію та загальну гігієну додатку: відсутність захисту від CSRF, ризики Mass-assignment, налаштування cookie та сесій, правила CORS, вимкнену перевірку TLS, залишені в коді виклики відладки на кшталт dd() і dump(), слабке хешування, небезпечну генерацію випадкових чисел, доступні для всіх файли .env та відсутність конфіденційних шляхів у .gitignore.
Кожен результат позначається статусом PASS, WARN або FAIL та має унікальний 12-значний хеш.
# Запуск окремих перевірок
Ви можете обмежити сканування конкретними перевірками за допомогою прапорця --only або виключити зайві через --skip, передавши назви через кому:
php artisan checkpoint:scan --only="SQL Injection Risks,CSRF Protection"
php artisan checkpoint:scan --skip="NPM CVE Audit,Debug Functions in Production Code"
Для використання в пайплайнах прапорець --json замінює звіт для читання на машинний формат. Якщо хоча б одна перевірка не пройдена, команда поверне код 1:
php artisan checkpoint:scan --json
# Конфігурація та ігнорування помилок
Опублікуйте файл конфігурації, щоб керувати окремими перевірками:
php artisan vendor:publish --tag=checkpoint-config
У файлі config/checkpoint.php можна вимкнути непотрібні перевірки (наприклад, npm audit у суто PHP-проєкті) та налаштувати поріг «свіжості» пакетів:
'checks' => [
Checks\ComposerAuditCheck::class => true,
Checks\NpmAuditCheck::class => false,
],
'package_freshness' => [
'minimum_age_days' => 3,
'whitelist' => [
'andreapollastri/checkpoint',
],
],
Якщо перевірка вказує на прийнятний для вас ризик, додайте її хеш до масиву suppressed. Це дозволить ігнорувати конкретний випадок, не вимикаючи всю перевірку повністю:
'suppressed' => [
'3ff08f5321c5',
'788146a4921b',
],
# Налаштування CI/CD та власні перевірки
Checkpoint може автоматично створити конфігурацію для вашого CI/CD. Команда php artisan checkpoint:github створює файл .github/workflows/checkpoint.yml для GitHub Actions, а php artisan checkpoint:gitlab — аналог для GitLab. Команда php artisan checkpoint:install-hooks додає сканування до скриптів post-update-cmd та post-install-cmd у Composer.
Ви також можете створювати власні перевірки, розширюючи клас AbstractCheck:
use Checkpoint\Checks\AbstractCheck;
use Checkpoint\Checks\CheckResult;
class MyCustomCheck extends AbstractCheck
{
public function name(): string
{
return 'My Custom Check';
}
public function run(): CheckResult
{
return CheckResult::pass('Everything looks good.');
}
}
# Безпека ланцюжка постачання
Автори документації наголошують на важливому правилі: запускайте composer install, npm install та саме сканування всередині Docker-контейнера, а не безпосередньо на робочій машині. Шкідливі пакети активуються під час виконання post-install скриптів ще до того, як сканер встигне їх перевірити. Andrea також рекомендує використовувати Checkpoint разом із Safe-Chain, який блокує відомі шкідливі npm-пакети ще до встановлення. Саме тому Checkpoint позначає дуже свіжі залежності як підозрілі.
Checkpoint — це інструмент статичного аналізу, тому він виявляє патерни, а не гарантує наявність експлуатованої вразливості. Його найкраще використовувати як один із рівнів захисту разом із фіксацією версій залежностей та ручним аудитом коду. Детальна документація та вихідний код доступні на GitHub.