Instant vulnerability report for any WordPress site
| Check | What is tested | If fails | Severity |
|---|---|---|---|
| HTTPS Enforced | URL begins with https:// — confirms encrypted transport is active |
All data in transit is unencrypted; login credentials, cookies & form data are exposed | Critical |
| Header | What is tested | If missing | Severity |
|---|---|---|---|
| Strict-Transport-Security (HSTS) | Checks for Strict-Transport-Security header in HTTP response |
Browsers may fall back to HTTP; vulnerable to SSL-stripping attacks | Warning |
| X-Frame-Options | Checks for X-Frame-Options: DENY or SAMEORIGIN |
Site can be embedded in iframes on other domains; enables clickjacking | Warning |
| X-Content-Type-Options | Checks for X-Content-Type-Options: nosniff |
Browsers may execute mis-typed scripts/styles; enables MIME-sniffing XSS | Warning |
| Content-Security-Policy (CSP) | Checks for presence of any Content-Security-Policy header |
No script-injection whitelist; attackers can run arbitrary JS via XSS | Warning |
| Referrer-Policy | Checks for Referrer-Policy header in HTTP response |
Full URL (including query strings with tokens) may leak to third-party sites | Info |
| Server Header Leak | Checks if Server or X-Powered-By exposes software version |
Attackers can fingerprint server stack and target known CVEs for that version | Warning |
| Check | URL probed | Risk if accessible | Severity |
|---|---|---|---|
| XML-RPC Enabled | /xmlrpc.php |
Brute-force amplification (1 request = 1000 login attempts), DDoS reflection vector, pingback abuse | Critical |
| readme.html Exposed | /readme.html |
Reveals exact WordPress version number; attackers cross-reference with CVE databases | Warning |
| license.txt Exposed | /license.txt |
Contains version indicator; lower risk but unnecessary exposure | Info |
| Install Script Exposed | /wp-admin/install.php |
Could allow a fresh WordPress installation if DB is wiped; full site takeover risk | Critical |
| Debug Log Exposed | /wp-content/debug.log |
Contains database credentials, file paths, errors, and potentially passwords in plaintext | Critical |
| REST API User Enumeration | /wp-json/wp/v2/users |
Exposes usernames for all authors; enables targeted credential-stuffing attacks | Warning |
| WP Version in Source | Homepage HTML source | Generator meta tag or ?ver=x.x.x in asset URLs reveals exact WP version |
Warning |
| Check | Method | Purpose | Severity |
|---|---|---|---|
| WordPress Detection | Scans homepage HTML for wp-content, wp-includes, WordPress generator tag, /wp-json/ paths |
Confirms site is running WordPress before other WP-specific checks are interpreted | Info |
| # | Step | Technical Detail |
|---|---|---|
| 01 | URL Validation | Input is parsed with the browser's native URL() API. https:// prefix is auto-added if missing. Origin is extracted to avoid path leakage. |
| 02 | HTTPS Check | Protocol is read directly from the parsed URL. No network request needed — if the browser can reach https:// it confirms TLS is active. |
| 03 | Header & Page Fetch | Homepage is fetched via https://api.allorigins.win/get?url=... — a free CORS proxy. Response headers and body text are returned as JSON. All header keys are normalized to lowercase for consistent matching. |
| 04 | WordPress Detection | Homepage HTML body is scanned with 6 regex patterns: /wp-content/, /wp-includes/, /WordPress/, /xmlrpc\.php/, /\/wp-json\//, and the generator meta tag pattern. |
| 05 | Version Detection | HTML source is searched for <meta name="generator" content="WordPress X.X"> and for ?ver=X.X.X query parameters in asset URLs (scripts/styles). |
| 06 | Header Checks | Each of 6 security headers is looked up by exact key in the normalized header dictionary. Presence = pass, absence = warning/info depending on severity classification. |
| 07 | Path Probing | 5 WordPress-specific paths are probed via allorigins.win. HTTP status code from the proxy's status.http_code field is checked. HTTP 200–399 = accessible (bad). 404/403/410 = blocked (good). 8-second timeout per request. |
| 08 | REST API User Enum | /wp-json/wp/v2/users is fetched. Response body is checked for presence of "id", "name", and "slug" fields simultaneously — all three present = user list is exposed. |
| 09 | Score Calculation | Score = 100 − (criticals × 20) − (warnings × 8), clamped to [0, 100]. Rendered as an animated SVG ring with colour thresholds at 75 (green) and 50 (amber). |
curl -I https://yoursite.com in any terminal. This shows the exact headers your server returns — use it to confirm or dispute any header check result without a proxy in the way.https://yoursite.com/xmlrpc.php, /readme.html, etc. in a browser. If you see content = file is exposed. 404 page = blocked correctly.curl -I method gives the most canonical server-level response./wp-content/uploads/ directory listing is open via the proxy.wpscan --url https://site.com --enumerate vp,vt,u