Malware removal, hardening and speed
A business site in Europe went down twice within weeks of moving host, then crawled with resource-limit errors. The host had removed one malicious plugin and called it done. Our investigation found the rest, cleaned the site, closed the likely way in, and then fixed the slowness that had been blamed on the hosting.
The client had asked us for a confidential technical audit: performance, mobile navigation and how maintainable the site was. Before that could start, the site went offline. It had moved to a new host in July, had an outage within two weeks, and then the admin slowed to a crawl with "508 Resource Limit Is Reached" errors. The host's scanner had found one malicious plugin, removed it, and considered the matter closed.
The site stayed offline behind a maintenance page while we worked, so visitors were not exposed.
Every malicious folder was removed and every tampered file replaced from an official copy. WordPress, the theme and its companion plugin were brought up to date, 18 plugins were reinstalled from clean sources and 10 updated, and all security keys were regenerated. We blocked PHP from running in the uploads folder, switched off file editing and XML-RPC, added firewall rules, and replaced the shared admin login with three named accounts protected by two-factor authentication.
A final scan before going live found one more hidden payload inside a legitimate plugin. We removed it, scanned again, and only then put the site back online, five days after we were hired.
"This has been an excellent experience professional, easy to understand and problem solved in a clear seemless way. So happy we will continue to work with Nirmal"
With the site clean, the client asked us to look at speed. The homepage was taking 5 to 11 seconds before the server sent its first byte, with 125 requests, 53 of them stylesheets. The cause was not the hosting: page caching had never been switched on, and an unused calendar plugin was disabling it. The server was also missing the image libraries WordPress needs to create smaller images.
After the second phase the server responded in about half a second, the admin page list loaded in about a second instead of thirty, and the homepage weighed about half as much, with 1,068 images served as WebP and fonts hosted on the site itself. We advised against a paid CDN and a hosting upgrade, because neither was the problem.
This was a security incident, so the client, the site and anything that could identify them are withheld. Details are taken from the project record.

