Exposed WordPress endpoints
WordPress routes that answer to anyone: the users route lists every author login name, and xmlrpc.php is the endpoint password-guessing tools use because it allows many attempts per request.
WordPress ships a few public endpoints that are convenient for integrations and equally convenient for attackers. This row appears only when SiteScan has identified the site as WordPress and at least one of them answered, so it is always a finding.
- user-enumeration —
/wp-json/wp/v2/usersreturned a list of author objects with theirslug, which is usually the login name. Half of a password-guessing attack is done for the attacker. - xmlrpc —
/xmlrpc.phpis enabled. Itssystem.multicallmethod packs hundreds of login attempts into one request, which is why brute-force tools prefer it over the login form. - readme —
/readme.htmlis still present and names the exact WordPress version, narrowing down which published exploits apply.
The scan only reads the responses: an array of user objects, the "XML-RPC server accepts POST requests only" message, and a version number on the readme page. A 401, an empty array or a 404 counts as closed. A leftover wp-config.php.bak is reported under files left behind.
How to fix it
Disable XML-RPC unless Jetpack or the mobile app needs it (security plugins have a switch, or deny xmlrpc.php at the server), restrict the users route to logged-in requests, and delete readme.html after each update. Keep WordPress itself up to date — see CMS detection.
See this check on your own site
Run a free scan: the report shows this row for your domain along with the other checks of the site audit.
More in “Exposure”
What SiteScan checks
TLS certificate
- TLS certificate expiry
- Outdated TLS versions (TLS 1.0/1.1)
- TLS certificate chain
- TLS certificate issuer
- Certificate signature algorithm
Domain registration
- Domain registration expiry
- Registered domain name
- Domain registrar
- Domain registration date
- Domain last updated date
- Domain status codes (EPP)
- Domain transfer lock
- Registrar abuse contact
- RDAP and WHOIS data source
Indexing
- robots.txt file
- CSS and JS blocked in robots.txt
- XML sitemap
- Sitemap index file
- Off-domain URLs in the sitemap
- Sitemap lastmod dates
- Broken URLs in the sitemap
- RSS and Atom feed
Addresses & redirects
Security headers
- HTTP security headers and grade
- Strict-Transport-Security (HSTS) header
- Content-Security-Policy (CSP) header
- X-Content-Type-Options: nosniff
- X-Frame-Options and clickjacking
- Referrer-Policy header
- Permissions-Policy header
- HSTS preload list
- CORS and cross-origin reads
- HTTP TRACE method
Delivery & reputation
- Cache-Control header for HTML
- ETag and Last-Modified revalidation
- HTTP/3 and QUIC support
- Server version disclosure in headers
- DNS blocklist (DNSBL) check
Internal links
Exposure
- Exposed sensitive files (.env, .git, backups)
- Directory listing enabled
- Public JavaScript source maps
- Exposed WordPress endpoints
Well-known files
- security.txt file
- llms.txt for AI assistants
- llms-full.txt file
- ads.txt authorized sellers file
- humans.txt file
- Well-known change-password URL
DNS & email
- MX records (mail servers)
- SPF record
- DMARC record and policy
- DNSSEC signing
- CAA record
- Nameserver redundancy
- IPv6 support (AAAA record)
- MTA-STS policy
- TLS-RPT reporting record
- BIMI record (brand logo in email)
- Wildcard DNS record
- Dangling CNAME and subdomain takeover
Privacy & consent
- Analytics and tracking scripts
- Cookie consent banner
- Privacy policy link
- Terms of service link
- Imprint (Impressum)
- Accessibility statement
Core Web Vitals
- Lighthouse performance score
- Largest Contentful Paint (LCP)
- Cumulative Layout Shift (CLS)
- Interaction to Next Paint (INP)
- CrUX field data vs lab data