Laravel Application Security: Close the Gaps Before Attackers Do
Laravel has strong security features built in, but they only help when they are used correctly. We review your Laravel app's code, settings, packages and server, and fix what puts your data at risk.
How do you secure a Laravel application?
Laravel application security comes from using the framework's built-in protections correctly and closing common setup mistakes. Turn off debug mode in production, keep the .env file private, use Eloquent or query bindings, validate every input, check permissions with policies, keep Laravel and Composer packages updated, and run the app on a hardened server with HTTPS.
Key takeaways
- Debug mode on a live server can expose secrets and must be off.
- The .env file should never be reachable from the web.
- Authorization checks are needed on every action, not only on menus.
- Validate every input and avoid raw SQL with user data.
- Run composer audit and update packages regularly.
- Server setup matters as much as code: web root, permissions, HTTPS.
Is Laravel secure by default?
Laravel is secure by default in many ways: it has CSRF protection, output escaping in Blade, password hashing and parameter binding in Eloquent. Laravel application security problems usually come from settings, custom code and packages added by developers.
| Built-in protection | What it does | How it gets weakened |
|---|---|---|
| CSRF tokens | Stops forms being submitted from other sites | Routes added to the CSRF exception list without need |
| Blade escaping {{ }} | Stops scripts in user text from running | Using {!! !!} on user-supplied content |
| Eloquent and query builder bindings | Stops SQL injection | Raw queries built by joining user input into strings |
| Password hashing | Stores passwords safely | Custom login code that skips the built-in hashers |
| Encryption with APP_KEY | Protects cookies and encrypted data | APP_KEY shared in Git or reused across apps |
| Mass assignment protection | Stops users setting fields like is_admin | Models with an empty guarded list and request()->all() |
This is why a Laravel review looks at how the app is built, not only at which version runs. It sits inside our wider web application security service.
What does a Laravel security review check?
A Laravel security review checks configuration, authentication, authorization, input handling, file uploads, APIs, packages, logs and the server. You get a report with clear fixes, ranked by risk, and code examples your developers can follow.
Configuration
- APP_ENV set to production and APP_DEBUG set to false on live servers
- .env file outside the public folder and blocked by the web server
- APP_KEY unique per environment and never committed to Git
- Session and cookie settings use secure, HTTP-only and same-site flags
- Trusted proxies and HTTPS settings correct behind a load balancer or CDN
Code and logic
- Every controller action checks permissions with policies, gates or middleware
- Form requests validate type, length and allowed values
- No user input joined into raw SQL or shell commands
- File uploads check type and size, are renamed, and stored outside the public web root where possible
- Rate limits on login, OTP, password reset and API routes
- Queued jobs and scheduled tasks do not trust data blindly
Dependencies and server
- Laravel version still receiving security fixes
- composer audit shows no known issues, or they are planned
- Web root points to the /public folder only
- PHP version supported and storage folders have correct permissions
- HTTPS everywhere with a valid certificate
Why is APP_DEBUG=true dangerous in production?
APP_DEBUG=true on a live Laravel site is dangerous because error pages can show stack traces, file paths, database details and sometimes environment values. Attackers search the internet for sites with debug mode on.
The fix is simple: set APP_DEBUG=false, clear and rebuild the config cache, and send errors to a private log or error-tracking tool instead. After turning it off, rotate any passwords or keys that may have been shown on error pages, such as database passwords, mail credentials and API keys.
How should authentication and authorization work in Laravel?
In Laravel, authentication proves who the user is, and authorization decides what they can do. Use Laravel's starter kits or Fortify for login, and policies or gates on every action that reads or changes data.
Common authorization mistake
A frequent bug is hiding a button in the menu but not checking permission in the controller. A user can still call the URL or API directly and see another customer's invoice by changing the ID. This is called an insecure direct object reference. The fix is to check ownership or role in a policy for every record.
- 1
List user roles
Write down each role, such as admin, staff, customer and API client, and what each may do.
- 2
Create policies per model
Add a policy for each important model, like Invoice or Order, with view, update and delete rules.
- 3
Call authorize in controllers
Use authorize() or the can middleware on every route that touches data.
- 4
Scope queries
Load records through the user or team relation so other people's data is never fetched.
- 5
Test with two accounts
Log in as two users and try to open each other's records. Both should be blocked.
- 6
Add two-step login for admins
Admin and staff accounts should use two-factor login, which Fortify supports.
How do you protect Laravel APIs?
Protect Laravel APIs with Sanctum or Passport tokens, scoped abilities, rate limiting, strict validation and API resources that return only needed fields. Never return full models that include hidden internal fields.
- Use Sanctum for first-party apps and simple tokens; give tokens only the abilities they need
- Set token expiry and let users revoke tokens
- Add throttle middleware on all API route groups, stricter on login and OTP
- Use API Resources to control which fields go out
- Configure CORS to allow only your own front-end domains
- Log failed logins and unusual request patterns
Our API security page covers API protection in more detail for any framework, including mobile app back ends.
Keeping Laravel and Composer packages updated
Keep Laravel secure by staying on a version that still gets security fixes, running composer audit regularly and updating packages on a schedule. Old packages with known issues are an easy way in for attackers.
Regular small updates
- Small changes, easy to test
- Security fixes applied quickly
- Upgrade to new major versions is less painful
Rare big upgrades
- Many breaking changes at once
- Known security bugs stay open for months
- Higher chance of downtime during the upgrade
We set up a simple routine: composer audit in your deployment pipeline, a monthly update window, and automated tests for login, payments and key flows. If you have no tests, we start with a short list of critical ones.
Server and deployment hardening for Laravel
A secure Laravel server serves only the /public folder, runs a supported PHP version, uses HTTPS, has a firewall, and keeps secrets out of Git. Deployment should be repeatable so nobody edits files by hand on the live server.
| Item | Safe setting |
|---|---|
| Web root | Points to /public, never the project root |
| Folder permissions | storage and bootstrap/cache writable by the app user only |
| Secrets | In .env or a secrets manager, not in code or Git history |
| Database | Not open to the internet; app user with only needed rights |
| SSH access | Keys only, no password login, limited users |
| Queues and Horizon dashboards | Protected by login and IP rules |
| Logs | Rotated, private, and free of passwords or OTPs |
| Backups | Daily database backups stored off the server and tested |
For apps on AWS, DigitalOcean or similar, see our cloud security page. Our backup and disaster recovery service makes sure you can restore quickly.
Who needs a Laravel security review, and what affects cost?
Any business that runs a Laravel CRM, customer portal, SaaS product, booking system or API should have a security review before launch and after big changes. Cost depends on the size of the code base and the depth of review.
- Number of routes, controllers and user roles
- APIs, mobile app back ends or payment features
- Server setup and number of environments
- Whether you want a report only or fixes done by us
- One-time review or ongoing security support
Our parent team, Shivah Web Tech, has built Laravel and custom web apps for 11+ years with a 25+ person in-house team. You get a clear quote after a free call. Pair this with a vulnerability assessment for a wider view, or contact us to start.
Related Pages
Web App Security
Secure code, logins and data in custom web applications.
API Security
Protect the APIs that connect your apps, stores and tools.
Cloud Security
Safe settings for hosting, VPS, cloud accounts and storage.
Vulnerability Assessment
Find known weaknesses in your sites and servers before bots do.
Frequently Asked Questions
Is Laravel more secure than plain PHP?
Laravel gives you many safety features that plain PHP projects must build by hand, such as CSRF protection, escaped output, password hashing and safe database queries. This makes it easier to build secure apps. But developers can still turn these features off or misuse them, so code review still matters.
What happens if my Laravel .env file is exposed?
An exposed .env file can reveal your database password, APP_KEY, mail login and API keys. Attackers can use these to read data or send emails as you. Block access to the file immediately, then change every password and key in it and check logs for misuse.
How do I check if my Laravel app has vulnerable packages?
Run composer audit in your project folder. It checks your installed packages against public security advisories and lists any known issues. Add it to your deployment pipeline so every release is checked automatically, and plan updates for anything it reports.
Which Laravel versions still get security fixes?
Laravel publishes a support policy that lists how long each major version gets bug fixes and security fixes. Check the official Laravel documentation for the current table. If your app runs a version that no longer gets security fixes, plan an upgrade soon.
Should I use Sanctum or Passport for my Laravel API?
Sanctum is simpler and fits most single-page apps, mobile apps and simple token needs. Passport is a full OAuth2 server, useful when other companies' apps need to connect to your API. Choose the simpler option unless you truly need OAuth2.
Do I need a firewall for my Laravel application?
A firewall adds a useful layer in front of your Laravel app. It can block bad bots, common attack patterns and login floods before they reach your code. It does not replace secure code, validation and permission checks, but it buys time when a new bug is found and gives you better traffic logs.
Is it safe to keep file uploads in the Laravel public folder?
It is safer to store uploads on a private disk or cloud storage and serve them through a controller that checks permissions. If files must be public, allow only safe types like images and PDFs, rename them, limit size, and make sure the server never runs scripts from the upload folder.
How long does a Laravel security review take?
A small to medium app can usually be reviewed in about one to two weeks, including the report. Large apps with many modules, APIs and integrations take longer. Fixes are planned after the report, based on risk and your release schedule.
Can you secure a Laravel app another agency built?
Yes. We often review apps built by other teams or freelancers. We need read access to the code repository and server details. You get a clear report your current developers can act on, or we can make the fixes ourselves.
Talk to our team today
Call or WhatsApp +91 85808 92163. We reply fast, Monday to Friday.