leonardolima/laravel-security-check
Laravel Security Check scans your Laravel application for common security issues and known vulnerabilities in Composer dependencies. It helps identify outdated or risky packages and reports findings so you can fix them before deployment, strengthening your app’s security with a simple Artisan comman...
What this package is (and is not). Based on the description and category, this is a static configuration linter for Laravel: an artisan-invoked command that inspects config/*.php, .env, and framework defaults and reports against a checklist (typically APP_DEBUG, APP_KEY, APP_ENV, session/cookie secure/http_only/same_site, HTTPS forcing, APP_URL, driver choices, exposed debug tooling). It is not a runtime control, WAF, or vulnerability scanner. Positioning it correctly is the single most important TPM decision here — adoption value comes from a CI/pre-deploy gate, not from a claim of "we are secure."
Architecture fit. Structurally low-friction: it is a dev-only dependency that consumes existing configuration and produces console output plus (presumably) a nonzero exit code. It introduces no runtime service, no middleware, no schema change, and no request-path coupling. That makes it architecturally near-neutral — the main question is not "does it fit" but "does it earn a slot in the pipeline."
Integration feasibility. High on the technical axis, low on the evidence axis. 60 stars and zero dependents mean there is no observable proof of it working in a real production Laravel estate. Last release 2025-05-26 is recent, which is a positive signal on maintenance cadence, but a single-maintainer package with no downstream adopters is a supply-chain consideration before it is a security consideration. Expect integration effort in hours, not days; expect due-diligence effort to exceed integration effort.
Technical risk.
Key questions to resolve before any pilot.
.env values in the CI runner, and does it risk logging sensitive values into build output?composer audit, secret scanning, cloud CSPM) does not already cover — i.e., is this net-new coverage or duplication?Stack fit. Laravel/PHP-native, Composer-installed, artisan-driven — no new runtime, no container change, no infra work. It slots into the same execution context as PHPUnit/Pint/PHPStan, so CI plumbing is already solved.
Migration path. There is nothing to migrate; this is additive. The correct framing is additive to an existing control set, and the gate should be sequenced so it never becomes the only control:
require-dev, run report-only against two representative environments (production-like and staging). Capture the full finding set. Validate the five key questions above.composer audit in CI and secret scanning in the repo, so no single green check is read as sufficient.Compatibility. Low risk but non-zero: verify against our exact Laravel major and PHP version, and confirm behaviour when configuration is cached (config:cache) — a linter reading cached config can produce misleading results if it runs after cache warm-up. Ensure the CI step runs in a defined order relative to cache generation.
Sequencing. Do not gate merges on day one. Report-only → baseline → narrow gate → full gate. Each step needs an explicit owner (platform/DevOps) and a rollback (disable the CI step, not revert code).
Maintenance. Near-zero runtime maintenance, moderate ownership maintenance. The real cost is the recurring human decision on each new finding and each upstream release: does the new check reflect our policy? Budget a named owner and roughly a half-day per quarter. Pin the version and require a reviewed PR to bump — do not let minor updates auto-merge into a security gate.
Support. Single maintainer, 60 stars, no dependents. Assume no support SLA. The mitigation is that the tool is disposable: if it stalls, our triaged baseline persists and can be reimplemented in-house without losing the intellectual work. Do not build internal process that assumes vendor responsiveness.
Scaling. Trivially horizontal — it's a per-repo CI step, cost scales linearly and cheaply across the fleet. The scaling problem is organizational: at ~10+ repos, per-repo policy drift becomes the failure mode. Centralize the check configuration and severity policy in a shared template so all repos are measured against one baseline.
Failure modes to design against.
.env values into CI logs. Verify and, if present, restrict log retention.Ramp-up. Under a day for an engineer familiar with Laravel and CI. The heavier lift is cultural: getting teams to treat findings as triage items with owners rather than noise, and preventing the badge from becoming the security narrative.
Recommendation. Worth a one-week, time-boxed evaluation because integration cost is negligible and the baseline document has standalone value. Do not adopt as a standing dependency without first resolving the exit-code/severity-threshold question and completing the build-vs-buy comparison against an in-house check suite. Treat score 0.48 / opportunity 18.39 and zero dependents as a signal to evaluate, not to standardize.
How can I help you explore Laravel packages today?