Title: Gmcfuerte Security Headers
Author: GMC Fuerte — Giulio Maria Cappellano
Published: <strong>October 15, 2026</strong>
Last modified: October 15, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/gmcfuerte-security-headers.svg)

# Gmcfuerte Security Headers

 By [GMC Fuerte — Giulio Maria Cappellano](https://profiles.wordpress.org/gmcfuerte/)

[Download](https://downloads.wordpress.org/plugin/gmcfuerte-security-headers.1.0.1.zip)

 * [Details](https://wordpress.org/plugins/gmcfuerte-security-headers/#description)
 * [Reviews](https://wordpress.org/plugins/gmcfuerte-security-headers/#reviews)
 *  [Installation](https://wordpress.org/plugins/gmcfuerte-security-headers/#installation)
 * [Development](https://wordpress.org/plugins/gmcfuerte-security-headers/#developers)

 [Support](https://wordpress.org/support/plugin/gmcfuerte-security-headers/)

## Description

Gmcfuerte Security Headers adds the security headers that scanners and hosting audits
expect, without editing the
 web server configuration, and tells you in plain words
what each header does.

What it sends (each one can be switched off):

 * X-Content-Type-Options: nosniff
 * X-Frame-Options: SAMEORIGIN (or DENY)
 * Referrer-Policy: strict-origin-when-cross-origin (or strict-origin, same-origin,
   no-referrer)
 * Permissions-Policy: Basic preset (camera, microphone and location off, also in
   embedded maps and video) or Strict preset
 * Strict-Transport-Security (HSTS): off by default, opt-in with a clear warning,
   max-age from 5 minutes to 1 year, optional includeSubDomains; sent on HTTPS requests
   only
 * Removes the X-Powered-By header that reveals your PHP version

Values come from short lists of safe choices, so a typing mistake cannot break your
site.

Never twice: a header that WordPress, another plugin or your .htaccess file already
sets keeps its value. The plugin
 only adds what is missing, and the settings page
names the headers it leaves to your .htaccess file.

Self-check: one click reads the headers your home page really sends (including those
set by the server, the
 .htaccess file or other plugins) and shows, for each one,
its status (OK, missing, sent twice, weak, reveals information), the value received
and what it means.

The plugin stores one option with your choices. It sets no cookies and does not 
collect personal data.

A Pro edition adds a Content-Security-Policy with a Report-Only rollout and script
nonces, free-form policy values,
 HSTS preload with reverse-proxy checks and 404
responses for version-revealing files. This free plugin works on its own and does
not need it. If both are active, this plugin sends nothing and says so on its settings
page. The Pro sends headers only with a valid licence, so run the self-check to 
see what your site really sends. Settings do not carry over.

### External services

This plugin does not connect to any external service. The self-check, only when 
an administrator clicks
 “Run the self-check”, makes one HTTP request from your 
server to your own home page (plus at most three redirects on the same site) to 
read its response headers. No data is sent to third parties.

## Installation

 1. Upload the `gmcfuerte-security-headers` folder to `/wp-content/plugins/`, or install
    the ZIP from Plugins -> Add New -> Upload Plugin.
 2. Activate the plugin through the Plugins screen.
 3. Open Settings -> Gmcfuerte Security Headers, check the choices and click Save Changes.
 4. Click “Run the self-check” to see what your home page sends.

## FAQ

### Will it break my site?

The defaults suit most sites, with two points to check:

 * The Basic Permissions-Policy, on by default, turns off camera, microphone and
   location for your pages and for
    everything embedded in them. Maps that locate
   the visitor (including the “my location” button of an embedded map), video calls,
   voice input and QR scanners stop working. If your site uses any of them, set 
   Permissions-Policy to Off.
 * X-Frame-Options stops other sites from showing your pages in a frame: switch 
   it off if another site of yours
    embeds these pages.

The Strict Permissions-Policy preset also blocks browser payment buttons (Apple 
Pay, Google Pay): do not use Strict on
 shops that use them.

### Why does the self-check still show a header as missing?

Headers are added by PHP. A page cache that serves stored pages without running 
PHP, or a CDN, may drop them. Some
 headers may also be left to your .htaccess file(
the settings page lists them): if your server ignores the .htaccess file or lacks
mod_headers, they are not sent. While the Pro edition is active this plugin sends
nothing, and the Pro sends headers only with a valid licence.

### Why is a header “sent twice”?

Two layers set it, for example the server configuration and a plugin. This plugin
never adds a header that is
 already present in PHP or declared in your .htaccess
file, but it cannot see headers that the server or a proxy adds on its own. Keep
one source.

### Should I turn on HSTS?

Only when every page and file of your site works over HTTPS. Browsers that receive
HSTS refuse plain HTTP for your
 domain for the whole max-age, and turning the setting
off does not undo that. Start with 5 minutes, then raise it.

### Does it add a Content-Security-Policy?

No. A Content-Security-Policy has to be tuned to the scripts and services each site
uses. The self-check tells you
 whether your site sends one.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Gmcfuerte Security Headers” is open source software. The following people have 
contributed to this plugin.

Contributors

 *   [ GMC Fuerte — Giulio Maria Cappellano ](https://profiles.wordpress.org/gmcfuerte/)

[Translate “Gmcfuerte Security Headers” into your language.](https://translate.wordpress.org/projects/wp-plugins/gmcfuerte-security-headers)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/gmcfuerte-security-headers/),
check out the [SVN repository](https://plugins.svn.wordpress.org/gmcfuerte-security-headers/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/gmcfuerte-security-headers/)
by [RSS](https://plugins.trac.wordpress.org/log/gmcfuerte-security-headers/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.1

 * Use WordPress.org language packs and automatic translation loading. Translation
   source files are maintained separately for translate.wordpress.org; they are 
   no longer bundled in the plugin ZIP.
 * Security header behaviour and saved settings are unchanged. English is used when
   a language pack is not installed.

#### 1.0.0

 * First release: nosniff, X-Frame-Options, Referrer-Policy and Permissions-Policy
   presets, opt-in HSTS, X-Powered-By removal, gap-filling rule (never sent twice),
   read-only self-check, translations in Italian, Spanish and French.

## Meta

 *  Version **1.0.1**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.3 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [hsts](https://wordpress.org/plugins/tags/hsts/)[permissions policy](https://wordpress.org/plugins/tags/permissions-policy/)
   [referrer-policy](https://wordpress.org/plugins/tags/referrer-policy/)[Security Headers](https://wordpress.org/plugins/tags/security-headers/)
   [x-frame-options](https://wordpress.org/plugins/tags/x-frame-options/)
 *  [Advanced View](https://wordpress.org/plugins/gmcfuerte-security-headers/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/gmcfuerte-security-headers/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/gmcfuerte-security-headers/reviews/)

## Contributors

 *   [ GMC Fuerte — Giulio Maria Cappellano ](https://profiles.wordpress.org/gmcfuerte/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/gmcfuerte-security-headers/)