How it works
Once a day, we look for details that help attackers:
- Software versions in response headers such as
Server,X-Powered-By,X-AspNet-Version,X-GeneratorandX-Runtime, and in the page'sgeneratormeta tag. A bareServer: nginxis harmless, but an exact version tells an attacker which known exploits to try. - Debug output on a page that does not exist: stack traces, framework error pages, SQL errors and fatal errors mean debug mode is on in production, which can leak file paths, queries and secrets.
Debug tools such as Telescope are covered by the Exposed files check.
Statuses
| Status | Meaning |
|---|---|
| OK | No versions or debug output found. |
| Warning | Software versions are disclosed, or we could not connect. |
| Failed | Error pages show debug output. |
By default you are notified of failures only.
Fixing common problems
- Debug output: turn off debug mode in production (
APP_DEBUG=falsein Laravel,display_errors = Offin PHP). - Versions in headers: hide them. In nginx, use
server_tokens off;. In PHP, setexpose_php = Off. In Apache, useServerTokens Prod. RemoveX-Powered-Byin your application or proxy, and remove the version from thegeneratormeta tag (most CMSs have a setting or plugin for it).