Laravel Security Scoring Methodology

How we grade Laravel open source projects. 39 framework-aware static analysis checks across five categories: code patterns, configuration, routes, filesystem, and dependencies. Every check, every threshold, every rule, published openly. The engine is open source: stack-shield/laravel-analyser.

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.

What Counts Toward the Grade

Critical, high and medium findings from graded checks count. Low and informational findings are reported but never change a grade.

Advisory checks point at code worth a look but cannot prove a problem from source alone, because the protection may live elsewhere: authorization in a policy, validation in a form request, HTTPS forced by the proxy. Maintainers see these findings; they never count toward the grade. Advisory checks are marked below.

Routes are resolved the way Laravel registers them, including group middleware, prefixes, route files mapped by service providers, middleware aliases and groups, and controller middleware. A debug route behind authentication, or a CSRF exemption for a webhook, is not a finding.

Known vulnerabilities come from the Packagist advisory database, the same source as composer audit, checked against the versions in composer.lock. Each vulnerable package counts once at its most severe advisory. Development dependencies are advisory because they do not ship to production. An advisory published in the last 14 days is shown but does not count yet, giving maintainers time to release a fix.

Security Checks

SS001
Mass Assignment high code

Unvalidated request data ($request->all(), except()) passed to create, fill or update on an unguarded model, or to forceFill/forceCreate

SS002
Raw SQL with Tainted Input critical code

DB::raw, whereRaw, selectRaw and similar built from request input

SS003
Dangerous Sinks with Tainted Input critical code

eval, shell_exec, system and similar reachable from request input

SS007
Controller Without Validation medium code advisory, not graded

Controllers using request data without visible validation

SS008
Hardcoded Credentials high code

Passwords, API keys and secrets written into source code

SS009
Unrestricted File Upload high code

Uploads written to a publicly served location with no file type validation

SS040
Insecure Random Number Generation medium code

rand()/mt_rand() generating tokens, passwords, codes and other secrets

SS041
Open Redirect high code

Redirects to a URL taken from the request

SS042
Weak Hashing for Passwords high code

MD5 or SHA-1 stored as, or compared with, a password

SS043
Unsafe Deserialization critical code

unserialize() on request data; on other data it is advisory

SS044
Blade Raw Output with User Data medium code

Request data rendered with {!! !!}; other variables are advisory

SS053
Missing Authorization in Controllers medium code advisory, not graded

Controllers with store/update/destroy and no visible authorization

SS054
Unconstrained Mass Delete Operations medium code

Deleting every row of a table in an action reachable without authentication

SS010
APP_KEY Missing or Weak critical config

A real APP_KEY committed to the repository, or a key that is too short

SS011
Weak Encryption Configuration medium config

Non-standard cipher in config/app.php

SS012
Debug Mode in Production high config

APP_DEBUG=true in committed production env files

SS013
Dev Tools in Production medium config

Debugbar, Ignition or the dump server in require instead of require-dev

SS014
Debug Log Level in Production low config

Debug log level in a production env file

SS015
Session Cookie Security medium config

Insecure session cookie settings

SS016
Permissive CORS Configuration medium config

Wildcard CORS origins combined with credentials

SS017
Insecure Mail Configuration low config

Mail driver set to log or array in production

SS045
Trusted Proxies Wildcard medium config

TrustProxies hardcoded to trust every proxy

SS046
Broadcasting Channel Authorization medium config

Broadcasting channels without authorization checks

SS047
Synchronous Queue in Production medium config

QUEUE_CONNECTION=sync in a production env file

SS048
File Cache Driver in Production low config

File cache driver in a production env file

SS049
HTTPS Not Enforced medium config advisory, not graded

No HTTPS forcing in the application

SS030
Known Security Advisories critical dependencies

Installed package versions with published security advisories

SS055
Outdated Laravel Framework Version medium dependencies

A Laravel version that no longer receives security fixes

SS020
Exposed Sensitive Files critical filesystem

.env, .git and similar files under public/

SS021
Storage Symlink Exposure medium filesystem

Sensitive files in public storage

SS022
Insecure File Permissions medium filesystem

Sensitive files with overly permissive permissions (local scans only)

SS057
Writable Configuration Files medium filesystem

Config files writable in production (local scans only)

SS058
Backup Files in Public Directory high filesystem

Database dumps or archives named like backups under public/

SS004
Auth Routes Without Throttle high routes

Login, password reset and two-factor submissions with no rate limiting on the route, its group, or in the login code

SS005
Route Model Binding Without Auth medium routes advisory, not graded

User-scoped routes with model binding and no auth middleware

SS006
CSRF Exemptions on State-Changing Routes medium routes

CSRF exemptions covering state-changing routes authenticated by the session, or exempting every route

SS050
API Routes Missing Rate Limiting medium routes

API routes with no rate limiting on the routes or the api middleware group

SS051
Debug/Test Routes in Production high routes

Debug, test or phpinfo routes reachable without authentication

SS052
Overly Broad Wildcard Routes low routes

Overly broad catch-all route parameters