SiteFort security guide

Hardening

The right place to start. Before firewall rules or scan schedules, harden WordPress to close the most common attack vectors on every production site.

Where to start

Open SiteFort → Hardening and work through it before touching the firewall or running scans. Hardening removes the conditions that make a site easy to target: version fingerprinting, exposed usernames, browseable directories, and PHP files that should not be publicly executable.

Some settings are safe to turn on immediately. Others depend on what your site runs. Use this split as your starting point:

Enable first
  • Hide WordPress Version
  • Prevent Username in Author Slug
  • Block User Enumeration
  • Disable Theme & Plugin Editor
  • Disable Directory Listing
  • Block PHP Execution in Uploads
  • Block Sensitive File Access
  • X-Content-Type-Options
  • X-Frame-Options (SAMEORIGIN)
  • Referrer-Policy
Test before enabling
  • Restrict REST API Access
  • Disable Application Passwords
  • Block Direct PHP in Plugins
  • Block Direct PHP in Themes
  • XML-RPC: Fully Disabled
  • Content-Security-Policy
  • Strict-Transport-Security
  • Permissions-Policy
  • Custom Login URL
Enable one group at a time. Save, verify the site works, then move to the next setting. This keeps rollback simple if something breaks.

WordPress Obscurity

Go to SiteFort → Hardening → WordPress Obscurity.

These settings reduce what automated scanners can learn about the site. Bots collecting version numbers, usernames, and admin paths use that information to run targeted attacks. Removing it does not make the site immune, but it makes mass scanning less productive against you specifically.

SettingRecommendedWatch out for
Hide WordPress VersionOnNothing to watch. Safe for every site.
Clean WordPress HeadOn for most sitesSome themes use feed discovery links. If RSS subscription features break, check this setting.
Prevent Username in Author SlugOnAuthor archive URLs change. Check that author pages still work correctly on publisher and blog sites.
Block User EnumerationOnIf a public-facing app reads WordPress user data via REST, confirm it still works after enabling.
Disable Theme & Plugin EditorOnNothing to watch. Use SFTP, Git, or a staging environment for code changes instead.
Disable Application PasswordsTest firstCheck whether any mobile app, REST client, or publishing tool authenticates using Application Passwords before disabling.
Restrict REST API AccessTest firstRead the section below before enabling this one.

Restrict REST API: check this list first

This setting requires unauthentication for REST requests. It is worth enabling on many sites, but a surprising number of standard WordPress features use the REST API. Before enabling, check whether your site uses any of the following:

  • WooCommerce cart, checkout, account pages, or store API
  • Contact forms, booking forms, or quote plugins
  • Page builder block previews or live search
  • Membership or LMS content delivery
  • Headless WordPress frontend
  • Mobile app or external publishing workflow

If any of these apply, use Endpoint Status inside the setting to allow only the specific public endpoints your site needs, rather than leaving everything open.

Server Hardening

Go to SiteFort → Hardening → Server Hardening.

These settings block file access and PHP execution paths that attackers commonly abuse. Three of them should be on every production WordPress site without exception.

SettingRecommendedWatch out for
Disable Directory ListingOnNothing to watch. No legitimate user needs to browse your folder structure.
Block PHP Execution in UploadsOnMedia and files still load normally. WordPress does not execute PHP from the uploads folder under any normal circumstance.
Block Sensitive File AccessOnNothing to watch. Dotfiles, debug logs, and config fragments should never be publicly accessible.
Block Direct PHP in PluginsOn for most sitesA small number of older plugins load files by direct URL. Test key plugin functionality after enabling.
Block Direct PHP in ThemesOn for most sitesCheck template pages, custom theme pages, and any frontend page using theme functionality after enabling.
XML-RPCDepends on setupSee table below.

XML-RPC setting

Your setupUse this setting
No Jetpack, no mobile publishing app, no legacy toolFully Disabled
Jetpack connected, or mobile app in useDisable Pingbacks Only
A legacy XML-RPC tool is requiredFully Enabled, then pair with a firewall IP rule restricting access to known IPs only
Hosted or managed environments: if your server config is managed externally or Write to Files is disabled, go to SiteFort → Tools → Manual Configuration Rules and copy the generated rules into your server config manually.

Security Headers

Go to SiteFort → Hardening → Security Headers.

Click Analyze Your Security Headers before making changes. SiteFort shows what is already deployed, what is missing, and what your hosting environment controls independently.

HeaderRecommendedWatch out for
X-Content-Type-OptionsEnableNothing to watch. Safe for all sites.
X-Frame-OptionsSAMEORIGINIf your site legitimately embeds pages in iframes on external domains, check those use cases before enabling DENY.
Referrer-Policystrict-origin-when-cross-originAnalytics that depend on full referrer URLs may show reduced data. Most modern analytics tools handle this correctly.
Permissions-PolicyDisable unused featuresCheck payment, geolocation, camera, and fullscreen before restricting. WooCommerce and video-heavy sites commonly use these.
Strict-Transport-SecurityOnly after HTTPS verifiedDo not enable Include Subdomains or Preload until every subdomain has working SSL. These are hard to reverse.
Content-Security-PolicyStart in Report OnlyCan break scripts, checkout flows, analytics, ads, maps, and embeds. Never switch to Enforce without testing.

How to roll out CSP without breaking the site

  1. Start in Report Only mode.
  2. Enable Skip CSP on Admin Pages from the start.
  3. Test your homepage, login page, forms, checkout, account pages, analytics, ads, maps, and any page with third-party embeds.
  4. Add the specific domains your site actually needs. Add them one source type at a time: scripts, styles, images, fonts, connections, frames.
  5. Switch to Enforce only after every tested page passes without errors.
WooCommerce, membership, and LMS sites: test the full checkout flow, payment confirmation, course player, and any email opt-in or affiliate tracking before enforcing CSP. These are the flows most likely to break.

HSTS preload: read before enabling

Once a browser sees the HSTS header, it enforces HTTPS for the max-age duration regardless of changes made in WordPress. Include Subdomains and Preload extend this to every subdomain and to browsers that have never even visited the site. Both are difficult to undo. Enable them only when the entire domain is HTTPS-ready with no exceptions.