Проводьте аудит безпеки Laravel-застосунків за допомогою інструменту Checkpoint

Перекладено ШІ 0 Laravel News 10 червня, 2026

Пакет Checkpoint пропонує 26 автоматизованих перевірок для виявлення вразливостей у коді та залежностях вашого Laravel-застосунку. Дізнайтеся, як посилити безпеку проєкту та автоматизувати аудит за допомогою лише однієї Artisan-команди.

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.

Популярні

Інше, що варто прочитати

41 Оновлено 10 червня, 2026

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

26 Оновлено 10 червня, 2026

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

11 Оновлено 10 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!