Laravel Security Scoring Methodology
How we grade Laravel open source projects. 40 framework-aware static analysis checks covering mass assignment, SQL injection, XSS, CSRF, credential leaks, dependency vulnerabilities, and more. Every check, every threshold, every rule — published openly.
Grading Rubric
| Grade | Criteria |
|---|---|
| A | Zero high or critical findings, fewer than 3 medium findings |
| B | Zero critical, at most 1 high, fewer than 6 medium |
| C | At most 2 high findings |
| D | Everything else |
Only grade A is displayed publicly. B/C/D grades are visible only to claimed maintainers.
Security Checks
Eloquent models without $fillable or $guarded
DB::raw, whereRaw, selectRaw with user input
eval, shell_exec, unserialize reachable from request input
Controllers using request data without validation
Passwords, API keys, and secrets in source code
File uploads without type or size validation
rand()/mt_rand() in security-sensitive contexts
Redirects using unvalidated user input
md5/sha1 used for password hashing
unserialize() with user-controlled or unconstrained data
{!! !!} raw output in Blade templates
Controllers with store/update/destroy but no authorization
truncate() or delete() without where clause
Missing, short, or committed APP_KEY
Non-standard cipher in config/app.php
APP_DEBUG=true in production env files
Telescope, Debugbar in production require
Debug log level in production env
Insecure session cookie settings
Wildcard origins in CORS configuration
Mail driver set to log or array in production
TrustProxies middleware trusts all proxies
Broadcasting channels without authorization checks
QUEUE_CONNECTION=sync in production env
CACHE_DRIVER=file in production env
APP_URL not using HTTPS in production
Login, register, password reset without rate limiting
User-scoped routes without auth middleware
CSRF exemptions on state-changing routes
API routes without throttle middleware
Debug/test routes left in route files
Overly broad catch-all route parameters
.env, .git accessible under public/
Sensitive files in public storage
Sensitive files with overly permissive permissions
Config files writable in production
Database dumps or archives in public directory
Packages with known security advisories
Laravel version below current LTS
Known-insecure package versions in require