PHP2Shell.fyi Check a site

Symfony and PHP2Shell

Symfony runs on PHP, and PHP2Shell is two serious flaws in PHP itself. Updating Symfony does not fix them. Update PHP on the server, then restart PHP.

Last reviewed . Rules of .

What to do

  1. Find the PHP version that serves your site (see below).
  2. Update PHP to a fixed release that your Symfony version supports: 8.2.35, 8.3.36, 8.4.27 or 8.5.12. Later releases in the same branch also work.
  3. Restart PHP-FPM or your web server and your Messenger workers.
  4. If your host runs PHP for you, ask them to do this and to confirm the version.

Check this too: a profiler running in production. If your site sends an X-Debug-Token header, the Symfony profiler is running on it. This is a separate problem from PHP2Shell.

Symfony says never to enable the profiler in production, because it leads to major security vulnerabilities. Turn it off now, whatever your PHP version. See Check for an exposed profiler.

What the checker can see

The checker reads one ordinary page of your site. For a Symfony site it looks for:

With the profiler off, a Symfony site sends no Symfony signal, so the checker cannot tell that it runs Symfony, or which version. The PHP2Shell result depends on the PHP version alone.

Where to see the PHP version

Supported PHP versions

Symfony data from symfony.com/releases. Symfony states a minimum PHP version only.
SymfonyStatusNeeds PHPSupport ends
8.1Latest stable8.4.0 or laterJanuary 2027
7.4Long-term support8.2.0 or laterSecurity fixes until November 2029
6.4Long-term support8.1.0 or laterSecurity fixes until November 2027

Pick a fixed PHP release at or above that minimum, and one that your app and its Composer packages support:

Symfony 8.0 is no longer maintained: its support ended in July 2026.

How to update PHP

Check for an exposed profiler

When the Symfony profiler stores data about a request, it adds an X-Debug-Token header to the response. For responses that are not HTML, the X-Debug-Token-Link header holds the profiler URL. The stored profiles are listed under /_profiler.

To check, look at the response headers of your site:

curl -sI https://example.com/ | grep -i '^x-debug-token'

If you see either header, or if /_profiler opens in a browser:

Notes

Sources

Check your site

The checker reads one ordinary page of your Symfony site, sends no attack traffic, and shows the public PHP signals it found.

Check my site