PHP and Laravel Penetration Testing

PHP and Laravel Penetration Testing

PHP and Laravel penetration testing for Laravel applications, WordPress-adjacent estates and the custom PHP that has been running since before either. APP_DEBUG=true in production risks showing your configuration values to anyone who hits an error. CREST-certified testers, fixed price from £2,560 for a 2-day single-framework scope, quoted within 24 hours.

  • Unlimited retesting
  • No rescheduling or cancellation fees
  • Fixed quote within 24 hours
Accredited & recognised
Cyber Essentials certified Cyber Essentials Plus certified IASME certifying body ISO 27001 certified ISO 9001 certified Crown Commercial Service supplier UK Cyber Security Council member
CREST Member
Verified accreditation
10
PHP-specific test areas
FREE Retest
Until the finding is closed
24h
Scope to active testing
CLIENT REFERENCE
“I would highly recommend EJN Labs to any organisation seeking reliable, detailed, and well-managed penetration testing services, particularly for government or enterprise-level projects.”
SquareOneImran SaghirProject Lead, SquareOneRead the SquareOne case study →
CLIENT REFERENCE
“There wasn’t another company we could find that could deliver what we needed in the timeframe we needed. The client loved it, and we got instant ROI from the engagement.”
CelloriDan WilcocksonFounder, CelloriRead the Cellori case study →
See all case studies →
WHY IT MATTERS
.env

The findings on a Laravel application cluster around configuration and convention. Debug mode left on so the error page renders the environment. An application key copied between environments, which turns signed cookies and encrypted payloads into something forgeable. A storage path published where it should have been private.

Laravel gives you good defaults and several ways to switch them off

The failure modes are specific and repeatable. APP_DEBUG=true left in the production .env. A model with $guarded = [] that takes request input. A Gate::before that returns true for more than admins. A route like /invoices/{invoice} bound by ID with no ownership check. A Telescope or Horizon gate that lets every signed-in user in.

Eloquent models are protected against mass assignment by default, but $guarded = [] makes every column assignable, so an is_admin field in the request body can promote the caller. In Gate::before, any non-null return is treated as the final answer, so a stray return true grants every ability to every user. Laravel’s Eloquent documentation sets out the mass assignment default.

We attack it as one user against another. With two ordinary accounts we swap the IDs on every bound route, post extra fields such as is_admin to every create and update endpoint, and request the Telescope and Horizon paths as a visitor and as a plain user. We also trigger errors. This is the core of a Laravel pentest: authorisation tested as deployed, not as designed. ISO 27001, SOC 2, PCI DSS and Cyber Essentials Plus audits accept manual penetration test evidence. Scan-only evidence is generally insufficient.

PHP SPECIFICS

What We Actually Test in a PHP Application

Ten test areas that apply because the application is PHP or Laravel, on top of the standard application checks. Every finding is verified, reproducible and mapped to OWASP, CWE and CVSS 3.1.

PHP-01

Debug mode and environment exposure

Debug pages that render configuration, .env reachable over HTTP, and error handlers that print stack traces to users.

PHP-02

Application key and cookies

Key strength and reuse across environments, cookie encryption and signing, and whether a session can be forged.

PHP-03

Object injection

Unserialize reached from request data, gadget chains in the installed packages, and cache or session payloads.

PHP-04

Authorisation

Policies and gates that are defined but not applied, route middleware gaps, and identifiers that are not bound to the caller.

PHP-05

Mass assignment

Fillable and guarded configuration, request merging into models, and fields such as role or tenant accepted from the client.

PHP-06

Eloquent and raw queries

Raw expressions, whereRaw, ordering and filtering from input, and query building in legacy code.

PHP-07

Blade and templating

Unescaped output, dynamic view names, and components rendered from user data.

PHP-08

Uploads and storage

Public disks, symlinked storage, executable uploads, image processing and path handling.

PHP-09

Queues, jobs and dashboards

Serialised job payloads, scheduled tasks, and monitoring dashboards published without authentication.

PHP-10

Legacy and dependencies

Unsupported PHP versions, custom frameworks, abandoned packages, and diagnostic files left in the web root.

METHODOLOGY

SAMPLE FINDING

What a PHP and Laravel finding looks like

Written the way a finding appears in our reports. The example below is reconstructed from publicly documented research, with hosts, paths and identifiers redacted. We do not republish client findings, named or anonymised.

CriticalCVSS 8.1 · CWE-502 · Illustrative example

Leaked application key turns a signed cookie into remote code execution

Affected
A Laravel application at [redacted] whose environment file was served over HTTP because the virtual host pointed at the project root rather than the public directory.
What we found
The environment file was readable, which exposed the application key. With that key we forged an encrypted cookie containing a serialised object, which the framework decrypted and unserialised, running a gadget chain drawn from the installed packages.
Why it matters
Unauthenticated remote code execution as the web user, plus the database, mail and payment gateway credentials that sat in the same file.
Fix
Point the virtual host at the public directory only, move the environment file above the web root, rotate the application key and every credential it exposed, and upgrade to a patched framework release.

Reconstructed from public research: CVE-2018-15133, deserialisation of untrusted data in Laravel where the application key is known.

PHP Penetration Testing: From Scope to Attestation

CREST-aligned methodology built on OWASP Web Security Testing Guide, OWASP ASVS, NIST SP 800-115, and PTES. Each finding maps to all four standards plus your specific compliance regime.

01

Reconnaissance

Application mapping, technology fingerprinting, content discovery, parameter enumeration, authentication-flow analysis, role-matrix construction.

02

Vulnerability Assessment

Authenticated and unauthenticated automated scanning across every user role, plus targeted manual checks for known weakness patterns.

03

Manual Exploitation

Hands-on testing by a CREST-certified pentester. Business-logic exploitation, chained vulnerabilities, privilege escalation, impact validation.

04

Reporting + Retest

Executive summary, technical report with CVSS scores and reproduction steps, walkthrough call, free retest after remediation, attestation letter.

CREDENTIALS

Verified Accreditations Auditors Accept

Every credential below is independently verifiable. UK procurement teams, FCA supervisors, ISO 27001 / SOC 2 auditors, and cyber insurance underwriters all recognise these standards.

GET YOUR QUOTE

Get a CREST PHP application pen test quote in 24 hours

A fixed-price quote back in one business day, from a named CREST assessor. No sales pipeline, no chasing.

  • CREST and IASME accredited. Testing your auditors and clients already recognise.
  • Fast-track testing within 24 hours where required. Free retest of every fix included.
  • Live findings via your client portal, not a four-week PDF.
  • Fixed price from £2,560 for a small, single-scope engagement, agreed up front. Most engagements run £3,840 and up. No day-rate surprises.
What clients say
There wasn’t another company we could find that could deliver what we needed in the timeframe we needed. The client loved it, and we got instant ROI from the engagement.
CelloriDan WilcocksonFounder, Cellori

Under NDA Further named references available on a scoping call.

What happens next
  1. We reply within one business day with a fixed-price quote from a named CREST assessor.
  2. You approve the scope and we book a start date, usually within 24 hours.
  3. Live findings land in your client portal as we test, with a free retest of every fix.
Accredited & recognised
CREST member Cyber Essentials certified Cyber Essentials Plus certified IASME certifying body ISO 27001 certified ISO 9001 certified UK Cyber Security Council Crown Commercial Service supplier

Get your fixed pen test quote in 24 hours

⚡24h reply ✓CREST tester ↻Free retests

or book a 20-min scoping call first

We reply within one business day. Your data stays with us. No newsletter signup.

COMPLIANCE READY

Reports Mapped to Every Framework

Findings are explicitly tagged to the relevant control reference. Your audit team submits the report directly without translation work.

ISO 27001:2022

Annex A.8.8 management of technical vulnerabilities plus A.5.15-5.18 and A.8.2-8.5 access control validation.

SOC 2 Type I & II

CC6 logical access, CC7 system operations, CC8 change management evidence.

PCI DSS

Requirement 11.4 application penetration testing across cardholder data environments, including ecommerce penetration testing for online retail platforms.

FCA SYSC

SYSC 4.1.1R, 6.1.1R, 13 mapped to each finding for FCA-regulated firms.

UK GDPR

Article 32 effectiveness testing, customer-data security controls, ICO-acceptable evidence.

Cyber Essentials Plus

Direct certification through our IASME body status, single-vendor delivery.

PRICING

Transparent PHP Penetration Testing Pricing

Pricing depends on app complexity, user-role count, business-logic depth, and integration surface. The day count flexes; the included deliverables stay the same across all engagements.

✦ ALWAYS · ON EVERY TIER · NO EXCEPTIONS ✦
✓Free retests, no time limit
✓Free rescheduling
✓No cancellation fees
✓24-hour scope to active testing
✓Live findings to client portal
✓Executive + technical report
✓60-min walkthrough call
✓Letter of attestation
SMALL / SMB
£2,560–£3,840
2 to 3 testing days

Single user role, basic CRUD application, marketing website with auth. Around 5 working days from kickoff to report.

Get a fixed quote
ENTERPRISE
£6,050–£9,270
5 to 7 testing days

Multi-tenant platform, complex authorisation matrix, integration-heavy applications. Around 15 to 20 working days from kickoff to report.

Get a fixed quote

Part of Technologies We Pen Test. These are examples of the stacks we publish pages for, not a complete list. If yours is not here we still test it. Related pages:

Full UK pen test cost guide

WHY EJN LABS

What You Get From PHP Penetration Testing

Six concrete differentiators competitors don’t all match.

CREST-Certified Testers, Verifiable

Every test by a CREST-certified pen tester (CRT, CCT APP, CCT INF where applicable). Verify our company status at crest-approved.org.

24-Hour Startup, Where Required

From signed scope to active testing in a single business day for incident response, audit deadlines, or regulator-driven timelines.

Live Findings, Not 4-Week PDFs

Critical issues reported during testing through your client portal. Your team remediates while testing continues.

Audit-Ready Reports

Executive summary plus full technical report with CVSS scores and explicit framework mappings (ISO 27001, SOC 2, PCI DSS, FCA SYSC).

Free Retests, Standard

Verify remediation of every finding before close-out. Letter of attestation for audit submission included. Most competitors charge £1,500-£3,000 per retest.

UK-Based CREST Testers

Every engagement performed by vetted, UK-based CREST-certified testers, matched to your needs, security clearance, and compliance scope.

FAQ

Frequently Asked

Do you test WordPress sites here?

A WordPress site is a website test rather than a PHP application test. This page is for Laravel, Symfony and custom PHP applications where the logic is yours.

Our app is old PHP with no framework. Can you test it?

Yes, and those engagements usually find the most. We will be clear about what needs rewriting rather than patching.

Do you need the source code?

No. A code review is a separate service and pairs well with this one for object injection and template issues.

Can you test Laravel Nova or Filament admin panels?

Yes. Admin panels are in scope when you give us an account, and they are usually where privilege escalation shows up.

What about Livewire?

In scope. Component actions are callable endpoints, so we test them the way we test any other endpoint.

Will you test the server as well?

Only if it is in scope. The web server configuration review covers Nginx, Apache and IIS in front of the application.

We set $guarded = [] on our models. Is that a problem?

It makes every column mass assignable, so any field in the request body can reach the database. Laravel protects models by default and silently discards attributes you have not listed, so the empty array is a deliberate switch-off. We post extra fields such as is_admin to every create and update endpoint and see which columns change. See the Eloquent mass assignment section.

Is it safe to leave Telescope or Horizon installed in production?

Both dashboards are open only in the local environment by default, and a gate you define decides who gets in elsewhere. If that gate returns true for any signed-in user, recorded requests and queued jobs are readable by people who should never see them. We request both paths as a visitor and as an ordinary user. See the Telescope dashboard authorisation docs.

Our routes use /orders/{order} model binding. Do we still need a policy?

Yes. Implicit binding resolves the Eloquent model that matches the segment in the URL, and that is all it does. It does not check whose record it is. Without a policy call or a scoped query, one customer can open another customer’s order by changing the number, and we test that with two accounts on every bound route.

EXPLORE EVERY SERVICE

20+ CREST-accredited testing services in one place

Web, mobile, API, cloud, AI, infrastructure, red team. Pick the test that fits your environment.

Penetration testing services
READY TO START

Get your PHP application tested properly

Send us the application and the roles. You will have a fixed scope and a number within 24 hours.