After a breach: the open doors found and closed in order of risk
A resort’s member platform had been breached, and nobody knew where the doors were. We audited both applications end to end, found how the attacker got in, and closed every opening in order of risk, starting within hours.
The situation
Two production PHP applications for a resort membership club: a staff CRM and a member portal that takes payments. Neither had been assessed before the breach.
What made it hard
The systems had to stay up for members throughout, so every test had to be non-destructive. And a raw list of findings is useless. The club needed to know what to fix first.
What we did
- Reviewed every file in both applications against the OWASP Top 10, and ran live, non-destructive attacks.
- Found the most likely way in: files left in the public web root that should never have been there.
- Recorded every critical and high finding with the exact code and route behind it. Most were injection and broken access control.
- Checked every finding twice before it reached the report: once to confirm the code exists, once to challenge whether it was really reachable and how severe it was.
- Ordered the work into hours, days, weeks and a longer project, and started with containment: the open doors were shut first.
- Closed SQL injection across both applications, and tracked every remaining item to closure.
Before and after
What we would do differently
A quick first pass found only a fraction of what reading every file found. That gap is why we now quote security audits on full coverage only. We also deliver a one-page action list before the full report, so the first fixes start the same day.
Method
PHP · OWASP Top 10 · Code audit · Non-destructive penetration testing
Related picks
Shop integrations moved off an old core system, with no downtime
Merchants print labels all day, and a bug here ships a parcel twice. We moved every integration to a new service, one at a time, with the old system ready to take over at any moment.
An airline’s marketing team publishes without a developer
Editors build their own pages in three languages. The public site holds no database and no credentials, so the booking path stays out of reach.
Ready to build something great?
Tell us what’s breaking, or what you need built. You talk to the engineer who does the work.
