• Latest
  • Trending
  • All
WordPress Security Auditin 10 Steps - PeopleAreGeek

WordPress Security Audit in 10 Steps: 2026 Practical Guide

May 27, 2026
WordPress Security Hardening Checklist: 34 Scored Controls with Copy-Paste Fixes - cover image

WordPress Security Hardening Checklist: 34 Scored Controls with Copy-Paste Fixes

June 3, 2026
Maximizing Website Speed with Image Optimization Techniques for 2026 - cover image

Maximizing Website Speed with Image Optimization Techniques for 2026

June 3, 2026
SSL certificate renewal manager - 8 ACME clients, expiry calculator and monitoring - cover image

SSL Certificate Renewal Manager: certbot, acme.sh, lego, Caddy, cert-manager

June 3, 2026
CORS policy generator - 14 server and framework configs with presets and live security review - cover image

CORS Policy Generator: Headers + Nginx, Apache, Express, FastAPI, Django Config

June 3, 2026
netsh wlan command reference - 72 commands with example output and copy - cover image

netsh wlan Commands: Windows Wi-Fi Cheat Sheet (Show Password, Profiles, Hotspot)

June 2, 2026
Fix: ESXi Host Not Responding / Disconnected in vCenter (2026) - cover image

Fix: ESXi Host Not Responding / Disconnected in vCenter (2026)

June 1, 2026
VMware ESXi Purple Screen of Death (PSOD): Diagnose and Recover (2026) - cover image

VMware ESXi Purple Screen of Death (PSOD): Diagnose and Recover (2026)

June 1, 2026
VMware PowerCLI command generator cover

VMware PowerCLI Command Generator: VM, Snapshots, Networking, esxcli

June 1, 2026
dd Command Generator: Write ISO to USB, Image Disks, Wipe Drives - cover image

dd Command Generator: Write ISO to USB, Image Disks, Wipe Drives

June 1, 2026
SSH Tunnel Command Generator: Local, Remote and Dynamic Forwarding - cover image

SSH Tunnel Command Generator: Local, Remote and Dynamic Forwarding

June 1, 2026
sed Command Generator: Build Substitute, Delete and Print Commands - cover image

sed Command Generator: Build Substitute, Delete and Print Commands

May 31, 2026
VMware Workstation and Hyper-V on the Same Machine (2026 Fix) - cover image

VMware Workstation and Hyper-V on the Same Machine (2026 Fix)

May 31, 2026
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools
Wednesday, June 3, 2026
  • Login
People Are Geek
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools
No Result
View All Result
People Are Geek
No Result
View All Result
Home Security Tools

WordPress Security Audit in 10 Steps: 2026 Practical Guide

by People Are Geek
May 27, 2026
in Security Tools
0
WordPress Security Auditin 10 Steps - PeopleAreGeek
0
SHARES
6
VIEWS
Share on FacebookShare on Twitter

Practical guide WordPress security · 16 min read · Updated May 2026

A WordPress site is rarely compromised by a zero-day exploit. It is compromised by the same series of forgotten configurations that have been drifting across the public web for ten years: outdated PHP version, an unpatched plugin, a missing HTTP header, an open xmlrpc.php, an admin login without 2FA. This guide walks through the complete audit of a WordPress site in about 90 minutes, as a visual 10-step checklist. Each step gives the exact copy-paste command, the free tool that automates the verification, and a snapshot of what you should see if the configuration is correct. At the end, your site blocks roughly 90 percent of the automated attacks targeting WordPress in 2026.

The 10-step checklist

  1. Check PHP and WordPress versions
  2. Audit installed plugins and their CVEs
  3. Test HTTP security headers
  4. Harden .htaccess or nginx config
  5. Validate SSL/TLS configuration
  6. Protect /wp-login.php and enable 2FA
  7. Decide what to do with xmlrpc.php
  8. Block user enumeration
  9. Set up logging and alerting
  10. Off-site backups and recovery plan
  11. FAQ

Why this audit, in 90 minutes, now

WordPress powers about 43 percent of the open web in 2026, which makes it the favourite target of automated attack toolkits. The attacker economics are simple: a scraper that probes /xmlrpc.php and /wp-login.php across the whole IPv4 space covers a meaningful chunk of the internet in a week. The defender economics are equally simple: closing the ten well-known holes in this guide forces the attacker to fall back to authenticated plugin exploitation or social engineering, which is roughly one hundred times more expensive per compromise. The 90 minutes invested today quickly save several days of incident response later.

1

Check PHP and WordPress versions

An outdated PHP or WordPress version is the first automated attack vector. WordPress 6.x and PHP 8.2+ are the minimum baseline in 2026; PHP 7.x is no longer supported and no longer receives security patches.

# SSH into the server
php -v
wp core version --allow-root
wp plugin list --update=available --allow-root
php 8.3.6 (cli) (built: Apr 11 2026) WordPress 6.7.1 +———-+——–+——–+———+ | name | status | update | version | +———-+——–+——–+———+ | akismet | active | none | 5.3.5 | +———-+——–+——–+———+
Free tool: SecuChecker detects the WP version exposed publicly via fingerprints (meta generator, asset tags, JS bundles) without SSH access.

Action if outdated: wp core update then wp plugin update --all. Test on staging before production if you have paid plugins.

2

Audit installed plugins and their CVEs

Every plugin is a potential entry point. The 2026 rule: zero dormant plugins, zero plugin without an update in 18 months, zero plugin with an unpatched critical CVE.

wp plugin list --field=name | xargs -I {} \
  curl -s "https://patchstack.com/api/v1/vulnerabilities?slug={}" | jq '.[] | select(.cvss_score > 7)'
contact-form-7 : OK (last update 2026-04-12) yoast-seo : OK (last update 2026-05-02) broken-plugin : ! CVE-2025-3421 CVSS 8.4 – NOT PATCHED
Free tools: Patchstack Database, WPScan, Wordfence Threat Intelligence.

Action: uninstall any “just in case” plugin you do not actively use. For a critical plugin without a fix, look for a maintained alternative or open an urgent ticket.

3

Test HTTP security headers

HTTP headers are the fastest security gain to deploy: zero functional impact, protection enforced by every modern browser. The 2026 baseline requires six headers.

curl -sI https://your-site.com/ | grep -iE \
  "(strict-transport-security|content-security-policy|x-frame-options|x-content-type-options|referrer-policy|permissions-policy)"
strict-transport-security: max-age=31536000; includeSubDomains content-security-policy: default-src ‘self’; … x-content-type-options: nosniff referrer-policy: strict-origin-when-cross-origin permissions-policy: camera=(), microphone=(), geolocation=() x-frame-options: SAMEORIGIN
Free tools: HTTP Headers Checker by PeopleAreGeek, securityheaders.com, Mozilla Observatory.

Action: add the missing headers at the web server level (nginx add_header or Apache Header always set). CSP is the most complex; deploy first in Content-Security-Policy-Report-Only mode for two weeks.

4

Harden .htaccess or nginx config

A handful of server-side rules close attack angles that WordPress itself does not cover. Add to .htaccess (Apache) or to the nginx config.

# Apache (.htaccess)
# Block direct access to sensitive files
<FilesMatch "^(wp-config\.php|readme\.html|license\.txt|\.htaccess)$">
  Require all denied
</FilesMatch>

# Disable directory listing
Options -Indexes

# Block PHP execution in /uploads/
<Directory "wp-content/uploads">
  <FilesMatch "\.php$">
    Require all denied
  </FilesMatch>
</Directory>
# nginx equivalent
location ~* /(wp-config\.php|readme\.html|license\.txt) {
    deny all;
}
location /wp-content/uploads/ {
    location ~ \.php$ { deny all; }
}
autoindex off;
Free tool: .htaccess Generator by PeopleAreGeek to compose rules without syntax errors.

Verify: curl https://your-site.com/readme.html must return 403. Same for curl https://your-site.com/wp-content/uploads/test.php.

5

Validate SSL/TLS configuration

A valid certificate is the entry ticket. A correctly-renewed certificate is the actual operational signal. The 2026 baseline: TLS 1.3 enabled, TLS 1.0 and 1.1 disabled, certificate with more than 30 days remaining, OCSP stapling on.

# Quick command-line check
echo | openssl s_client -servername your-site.com -connect your-site.com:443 2>/dev/null \
  | openssl x509 -noout -dates -issuer
nmap --script ssl-enum-ciphers -p 443 your-site.com
notBefore=Apr 2 00:00:00 2026 GMT notAfter=Jul 1 23:59:59 2026 GMT issuer=C = US, O = Let’s Encrypt, CN = R3 TLSv1.3: ciphers: TLS_AES_256_GCM_SHA384 (ecdh_x25519) – A TLS_CHACHA20_POLY1305_SHA256 (ecdh_x25519) – A
Free tools: SSL Certificate Checker, TLS Version Selector by PeopleAreGeek, Qualys SSL Labs for a full grade (aim for A or A+).

Action: if the grade is below A, copy the nginx or Apache config generated by our TLS Version Selector and deploy it. Set up a 30-day pre-expiry certificate monitor.

6

Protect /wp-login.php and enable 2FA

The login page is target number one for brute-force attacks. Three measures reduce the surface: server-side rate limiting, mandatory 2FA for admins, and optional renaming of the login URL.

# nginx rate limit on /wp-login.php
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location = /wp-login.php {
    limit_req zone=login burst=2 nodelay;
    fastcgi_pass php-fpm;
    # ...
}
Recommended 2FA plugins: Two Factor (official, free), WP 2FA, or the built-in 2FA in Wordfence Premium.

Verify: attempt ten failed logins in under one minute from a test IP, confirm the 11th is rate-limited. Check that every active admin account has 2FA via wp user list --role=administrator.

Warning: do not rename the login URL if you use the WordPress mobile app or Jetpack, which expect the default path.
7

Decide what to do with xmlrpc.php

The xmlrpc.php file serves the WordPress mobile app, some Jetpack integrations, and historically pingbacks. If you use neither, block it entirely. Otherwise, restrict it to known IPs.

# nginx: block entirely
location = /xmlrpc.php {
    deny all;
}

# Variant: allow Jetpack only
location = /xmlrpc.php {
    allow 192.0.64.0/18;  # Jetpack
    deny all;
}
# Apache (.htaccess)
<Files xmlrpc.php>
  Require all denied
</Files>
Verify: curl -X POST https://your-site.com/xmlrpc.php must return 403. The Jetpack IP list is published in their official documentation.
8

Block user enumeration

WordPress exposes the user list by default through two endpoints: ?author=N which redirects to user N’s slug, and /wp-json/wp/v2/users which returns the full JSON. Both leaks let an attacker target the brute-force on the right username instead of testing “admin”.

# Block ?author=N (Apache .htaccess)
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+ [NC]
RewriteRule ^ /? [L,R=301]

# Block /wp-json/wp/v2/users (child theme functions.php)
add_filter('rest_endpoints', function($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    }
    return $endpoints;
});
curl https://your-site.com/?author=1 -> 301 to / curl https://your-site.com/wp-json/wp/v2/users -> 401 or 404
Free tool: SecuChecker tests both endpoints automatically and flags if the admin username is exposed.
9

Set up logging and alerting

Without logs, you discover a compromise the day the site is defaced. With logs and alerting, you discover it within the hour following the first abnormal attempt.

  • Server logs: nginx/Apache access.log and error.log rotated, kept 90 days minimum.
  • Application logs: the WP Activity Log plugin or Wordfence to trace admin actions (plugin modifications, role changes, account creations).
  • Uptime and integrity monitoring: SecurityWatch by PeopleAreGeek monitors 5 dimensions (uptime, defacement hash, TLS expiry, header regression, WP version drift) with Slack/Discord webhook alerts.
# Logrotate nginx (Debian/Ubuntu)
sudo nano /etc/logrotate.d/nginx
# Check "rotate 90" and "compress"
sudo logrotate -d /etc/logrotate.d/nginx
Free tool: SecurityWatch runs continuous monitoring without a backend (browser-side, localStorage watchlist), ideal for 1-10 WP sites.
10

Off-site backups and recovery plan

An existing but untested backup is a reassuring fiction. The 3-2-1 rule still holds in 2026: 3 copies, on 2 different media, including 1 off-site. Test restoration every quarter.

# Manual backup via WP-CLI
wp db export ~/backup-$(date +%F).sql
tar -czf ~/wp-content-$(date +%F).tar.gz wp-content/

# Upload to S3 / Backblaze / OVH Object Storage
rclone copy ~/backup-$(date +%F).sql remote:wp-backups/
rclone copy ~/wp-content-$(date +%F).tar.gz remote:wp-backups/
Recommended plugins: UpdraftPlus (free, S3/Google Drive/Dropbox), Snapshot Pro or BlogVault for e-commerce sites.

Quarterly test: restore the latest backup to a staging environment, verify everything works, measure recovery time (RTO). A site that takes 6 hours to restore loses that much revenue during a compromise.

Run the audit in one click?

SecuChecker runs the 18 main checks against your URL in under 20 seconds and gives a posture score with the exact fix for every gap. Free, browser-based, non-intrusive.

Launch SecuChecker →

Recommended audit cadence

One audit is not enough if it is not repeated. The rhythm that works in 2026: full audit (the 10 steps) at launch and every quarter, mini-audit (steps 1, 2, 3 and 5) after every major WordPress update, continuous monitoring via SecurityWatch or equivalent between audits. A well-monitored site has roughly ten times lower incident rate than a site monitored once a year, regardless of the application stack.

Frequently asked questions

How long does a full audit take for a beginner?

Plan 3 to 4 hours for the first audit if you are discovering the environment, then 60 to 90 minutes for subsequent audits once you know your server paths. The longest steps are 3 (headers, sometimes 30 minutes of CSP tuning) and 10 (restoration test, about one hour).

Should I really disable xmlrpc.php?

If you use neither the WordPress mobile app, nor connected-mode Jetpack, nor external publishing software (Microsoft Word, MarsEdit), block it. The security benefit is high (avoids brute-force attacks via the system.multicall method) and the functional cost is zero.

Which security plugins should I use in 2026?

For most sites, Wordfence (free) already covers 80 percent of the needs (application firewall, file scanning, 2FA). For e-commerce or critical sites, add Patchstack or WPScan Premium for real-time CVE monitoring, plus an upstream WAF (Cloudflare Pro or Sucuri).

My host says it “handles security” – is that enough?

A managed host (Kinsta, WP Engine, OVH WordPress) handles the server layer (PHP updates, network firewall, backups), but not the application layer (exposed plugins, admin accounts without 2FA, ?author=N leaking the username). Steps 2, 6, 7 and 8 of this guide remain your responsibility.

How do I know if my site is already compromised?

Common warning signs: abnormal outbound traffic to unknown IPs, new administrator accounts created without your action, hidden pages in /wp-content/uploads/ with pharma or casino content, PHP files in the root with random names. Free diagnostic tools: VirusTotal (URL), Sucuri SiteCheck, and the Wordfence file scan (free).

Should I block all foreign IPs?

No, and it is even counterproductive: Google bot, CDNs, and certain third-party services come from globally distributed IPs. A more effective approach is to block only IPs that fail three times on /wp-login.php via fail2ban or the Wordfence application firewall; the result protects more while inconveniencing less.

PeopleAreGeek tools to go further

SecuChecker (one-shot WP audit) SecurityWatch (continuous monitoring) HTTP Headers Checker SSL Certificate Checker TLS Version Selector CSP Header Builder .htaccess Generator Companion guide: WordPress Security Audit 2026
ShareTweetPin
People Are Geek

People Are Geek

I'm Stephane, a network and systems engineer with over 15 years of hands-on experience on production infrastructure, virtualization (ESXi, Proxmox), networking, and self-hosting. Earlier in my career I built and ran a Linux resource site that became a well-known reference for sysadmins. Today I focus on cybersecurity, and I also work as a technical trainer, teaching networking and security to people who do it for a living. Everything on People Are Geek comes from real-world practice, not theory. I build every tool on this site myself, and I write about what I've actually deployed, broken, and fixed. If it's here, I've used it.

People Are Geek

Copyright © 2017 JNews.

Navigate Site

  • About PeopleAreGeek
  • All Tools and Articles
  • Contact
  • Cookie Policy
  • Hyper-V Hub: Tools, Error Fixes and Lab Guides
  • Linux Hub: Cross-Distro Reference, Articles, Tools
  • Page de test Codex
  • Privacy Policy
  • Sample Page
  • Terms of Service
  • VMware vSphere & ESXi Hub: Tools, Error Fixes and Guides

Follow Us

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools

Copyright © 2017 JNews.