NeoShield Security Quantum X Scan Free

Sample report using demonstration data.

Website Security Remediation Report

Sample Website Security Report

Example Retail Co. (demonstration) · www.client-shop.example

Report ID
DEMO-2026-0001
Assessment date
2026-10-01
Verification scan
2026-10-08
Prepared by
NeoShieldSecurity QUANTUM X Agency branding: planned

Download sample PDF report The same report as a client-ready PDF: cover, executive summary, findings, platform fixes and remediation timeline.

Reports carry NeoShield branding today. Agency branding is planned. Every name, finding and score on this page is demonstration data for a fictional client.

Executive summary

Observed configuration score

55/100 · Grade D

After verified fixes: 73/100, grade C

This score covers only the publicly observable configuration checks completed in this assessment. It does not measure application vulnerabilities or overall business risk.

Action required

Severity distribution

High 1 · Medium 3 · Low 2

4 open · 2 verified fixed · 11 checks passed

What this means for the business

The website is reachable over HTTPS with a valid certificate, but several browser security controls are missing. The most important open gaps are the missing Content-Security-Policy, a defense-in-depth control, and session cookies without the Secure and HttpOnly flags. Two issues were fixed and verified by a follow-up scan on 2026-10-08. Four issues remain open and are listed in priority order with configuration examples.

Technical summary

Passive assessment of publicly observable HTTP response headers, TLS configuration, cookies, redirects, email-authentication DNS records and common exposed paths. 6 findings (1 high, 3 medium, 2 low); 2 verified fixed; 11 checks passed; DKIM not assessed (no selector supplied).

Prioritized findings

RefFindingSeverityVerification status
F-01Content-Security-Policy header not setMedium Still observed
F-03Session cookie missing Secure and HttpOnly flagsMedium Still observed
F-04No clickjacking protectionMedium Still observed
F-06Server software version disclosedLow Still observed
F-02Strict-Transport-Security header missingHigh Resolved
F-05X-Content-Type-Options header missingLow Resolved

Findings, evidence and remediation

F-01 Content-Security-Policy header not set Medium

Finding ID
DEMO-2026-0001-F-01 · rule csp
Confidence
High
Affected URL
https://www.client-shop.example/
Detection method
Passive HTTP response header inspection (GET /, redirects followed).
Evidence
GET / responded HTTP/2 200 with no Content-Security-Policy or Content-Security-Policy-Report-Only header. (observed 2026-10-01T09:14:05Z)
Potential business impact
Without a Content Security Policy, the browser has fewer restrictions available to reduce the impact of a successful content-injection or cross-site scripting vulnerability. If a script injection flaw is ever introduced, for example through a plugin, there is no browser-side control limiting what injected code can load or send.
Technical impact
No script-src, object-src, base-uri or frame-ancestors restrictions are applied by the browser.
Limitation
The absence of a Content Security Policy does not independently prove that the website is vulnerable to cross-site scripting. CSP is a defense-in-depth control.
Remediation
Start with a report-only policy, review the reports, then enforce it.
Verification criteria
A rescan observes an enforced Content-Security-Policy header that restricts script sources. A report-only policy is recorded as partially resolved.
Verification status
Still observed on the verification rescan
Status
New
References
developer.mozilla.org · owasp.org
Configuration examples

Configuration examples by platform

Nginx

# server { } block (or http { })
add_header Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" always;

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Reload with: nginx -t && systemctl reload nginx. add_header in a location block replaces headers set at server level.

Apache HTTP Server

# Requires mod_headers (a2enmod headers)
Header always set Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'"

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Place in the VirtualHost or .htaccess, then run apachectl configtest and reload.

Microsoft IIS

<?xml version="1.0" encoding="utf-8"?>
<!-- web.config: merge into the existing <configuration> element -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Content-Security-Policy-Report-Only" value="default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Applies to the site or application that owns this web.config.

Cloudflare

Rules > Transform Rules > Modify Response Header > Create rule
1. Apply to: All incoming requests (or this hostname)
2. Action: Set static
3. Header name: Content-Security-Policy-Report-Only
4. Value: default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
5. Deploy

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Cloudflare sets the header at the edge for proxied (orange-cloud) traffic only.

WordPress

<?php
// In a small site-specific plugin (or the child theme's functions.php)
add_action( 'send_headers', function () {
    header(
        "Content-Security-Policy-Report-Only: "
        . "default-src 'self'; "
        . "object-src 'none'; "
        . "base-uri 'self'; "
        . "frame-ancestors 'self'"
    );
} );

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Setting the header in the web server or CDN is preferred; use this when you only control WordPress.

AWS CloudFront

CloudFront > Policies > Response headers > Create response headers policy
1. Security headers or Custom headers: add Content-Security-Policy-Report-Only = default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
2. Origin override: enabled
3. Attach the policy to the distribution's cache behavior(s)

Start in Report-Only mode, add the origins your pages really use, then rename the header to Content-Security-Policy to enforce it. Changes propagate to all edge locations within a few minutes.

Test configuration changes in a staging environment before production deployment. An incorrect policy can break scripts, sign-in, checkout, embedded services, analytics, or third-party integrations.

References: MDN: Content-Security-Policy · OWASP Content Security Policy Cheat Sheet

F-03 Session cookie missing Secure and HttpOnly flags Medium

Finding ID
DEMO-2026-0001-F-03 · rule cookies
Confidence
High
Affected URL
https://www.client-shop.example/
Detection method
Passive inspection of Set-Cookie headers on public pages.
Evidence
Set-Cookie: PHPSESSID=[redacted]; path=/ (observed 2026-10-01T09:14:05Z)
Potential business impact
Without Secure, the cookie can be sent over unencrypted HTTP; without HttpOnly, page scripts can read it. Increased risk of session theft and account takeover for signed-in customers.
Technical impact
The session identifier is readable by page scripts and may be sent over plain HTTP.
Limitation
Only cookies set on publicly accessible pages are visible to a passive scan.
Remediation
Set Secure, HttpOnly and SameSite=Lax on session cookies.
Verification criteria
A rescan observes the session cookie with the Secure and HttpOnly attributes.
Verification status
Still observed on the verification rescan
Status
Remediation planned
References
developer.mozilla.org
Configuration examples

Configuration examples by platform

Nginx

# When Nginx proxies an application (nginx 1.19.3+)
proxy_cookie_flags ~ secure httponly samesite=lax;

Applies to cookies set by the proxied application. Fixing the flags in the application itself is preferred.

Apache HTTP Server

# Requires mod_headers. Prefer fixing the application; use this as a stopgap.
Header edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"
Header edit Set-Cookie "(?i)^((?:(?!;\s?Secure).)+)$" "$1; Secure"

Each rule adds the flag only when it is missing. Use "Header edit" (not "always") so it applies to cookies set by the application. Test that sign-in still works.

Microsoft IIS

<?xml version="1.0" encoding="utf-8"?>
<!-- web.config (ASP.NET): merge into the existing <configuration> element -->
<configuration>
  <system.web>
    <httpCookies requireSSL="true" httpOnlyCookies="true" sameSite="Lax" />
  </system.web>
</configuration>

The sameSite attribute requires .NET Framework 4.7.2 or later.

WordPress

; php.ini (or .user.ini) for the PHP session cookie
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = "Lax"

WordPress's own login cookies are already HttpOnly and use Secure on HTTPS sites; plugins that set their own cookies may need updating.

Test configuration changes in a staging environment before production deployment. An incorrect policy can break scripts, sign-in, checkout, embedded services, analytics, or third-party integrations.

References: MDN: Set-Cookie · OWASP Session Management Cheat Sheet

F-04 No clickjacking protection Medium

Finding ID
DEMO-2026-0001-F-04 · rule xfo
Confidence
High
Affected URL
https://www.client-shop.example/
Detection method
Passive HTTP response header inspection.
Evidence
Neither X-Frame-Options nor a CSP frame-ancestors directive was returned. (observed 2026-10-01T09:14:05Z)
Potential business impact
Any other website can load these pages inside a hidden frame and trick visitors into clicking. Visitors could be manipulated into unintended actions such as changing account settings.
Technical impact
The pages can be embedded in a cross-origin frame.
Remediation
Send X-Frame-Options: SAMEORIGIN, or CSP frame-ancestors 'self'.
Verification criteria
A rescan observes X-Frame-Options (DENY or SAMEORIGIN) or a CSP frame-ancestors directive.
Verification status
Still observed on the verification rescan
Status
Under review
References
developer.mozilla.org
Configuration examples

Configuration examples by platform

Nginx

# server { } block (or http { })
add_header X-Frame-Options "SAMEORIGIN" always;

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Reload with: nginx -t && systemctl reload nginx. add_header in a location block replaces headers set at server level.

Apache HTTP Server

# Requires mod_headers (a2enmod headers)
Header always set X-Frame-Options "SAMEORIGIN"

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Place in the VirtualHost or .htaccess, then run apachectl configtest and reload.

Microsoft IIS

<?xml version="1.0" encoding="utf-8"?>
<!-- web.config: merge into the existing <configuration> element -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="SAMEORIGIN" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Applies to the site or application that owns this web.config.

Cloudflare

Rules > Transform Rules > Modify Response Header > Create rule
1. Apply to: All incoming requests (or this hostname)
2. Action: Set static
3. Header name: X-Frame-Options
4. Value: SAMEORIGIN
5. Deploy

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Cloudflare sets the header at the edge for proxied (orange-cloud) traffic only.

WordPress

<?php
// In a small site-specific plugin (or the child theme's functions.php)
add_action( 'send_headers', function () {
    header(
        "X-Frame-Options: "
        . "SAMEORIGIN"
    );
} );

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Setting the header in the web server or CDN is preferred; use this when you only control WordPress.

AWS CloudFront

CloudFront > Policies > Response headers > Create response headers policy
1. Security headers > X-Frame-Options: SAMEORIGIN
2. Origin override: enabled
3. Attach the policy to the distribution's cache behavior(s)

If you already send a Content-Security-Policy, adding frame-ancestors 'self' gives the same protection in modern browsers. Changes propagate to all edge locations within a few minutes.

Test configuration changes in a staging environment before production deployment. An incorrect policy can break scripts, sign-in, checkout, embedded services, analytics, or third-party integrations.

References: MDN: X-Frame-Options · OWASP Clickjacking Defense Cheat Sheet

F-06 Server software version disclosed Low

Finding ID
DEMO-2026-0001-F-06 · rule server_banner
Confidence
Medium
Affected URL
https://www.client-shop.example/
Detection method
Passive inspection of the Server and X-Powered-By response headers.
Evidence
Server: Apache/2.4.41 (Ubuntu)
X-Powered-By: PHP/7.4.3 (observed 2026-10-01T09:14:05Z)
Potential business impact
Exact version numbers make it easier to match the site against known vulnerabilities. Helps attackers prioritise the site when a new vulnerability is published.
Technical impact
Software names and versions are disclosed to every visitor.
Limitation
A version banner can be inaccurate: distributions often backport security fixes without changing the version string.
Remediation
Hide version details in the web server and PHP configuration, and keep both updated.
Verification criteria
A rescan observes no version numbers in the Server or X-Powered-By headers.
Verification status
Still observed on the verification rescan
Status
New
References
owasp.org
Configuration examples

Configuration examples by platform

Nginx

# http { } block
server_tokens off;

Hides the version number; the Server header still says "nginx".

Apache HTTP Server

# Main server configuration (not .htaccess)
ServerTokens Prod
ServerSignature Off

Reduces the Server header to "Apache". For X-Powered-By, set expose_php = Off in php.ini.

Microsoft IIS

<?xml version="1.0" encoding="utf-8"?>
<!-- web.config, IIS 10 (version 1709+): merge into the existing <configuration> element -->
<configuration>
  <system.webServer>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

removeServerHeader is available from IIS 10 version 1709.

WordPress

; php.ini (or .user.ini): removes the X-Powered-By: PHP/x.y header
expose_php = Off

The Server header itself is controlled by the web server (Nginx or Apache), not by WordPress.

Test configuration changes in a staging environment before production deployment. An incorrect policy can break scripts, sign-in, checkout, embedded services, analytics, or third-party integrations.

References: OWASP: Fingerprint Web Server

F-02 Strict-Transport-Security header missing High

Finding ID
DEMO-2026-0001-F-02 · rule hsts
Confidence
High
Affected URL
https://www.client-shop.example/
Detection method
Passive HTTP response header inspection over HTTPS.
Evidence
HTTPS is available, but the response carries no Strict-Transport-Security header. (observed 2026-10-01T09:14:05Z)
Potential business impact
HSTS tells browsers to always use HTTPS for this site, closing the window in which a first request can be downgraded to HTTP. Visitors on untrusted networks could be redirected to an insecure version of the site.
Technical impact
The first plain-HTTP request to the site is not upgraded by the browser.
Remediation
Send Strict-Transport-Security with a max-age of at least one year once HTTPS is stable on every subdomain.
Verification criteria
A rescan observes Strict-Transport-Security with max-age of at least 31536000 on the HTTPS response.
Verification status
Verified fixed by the rescan on 2026-10-08
Status
Resolved
References
developer.mozilla.org

F-05 X-Content-Type-Options header missing Low

Finding ID
DEMO-2026-0001-F-05 · rule xcto
Confidence
High
Affected URL
https://www.client-shop.example/
Detection method
Passive HTTP response header inspection.
Evidence
No X-Content-Type-Options header in the response. (observed 2026-10-01T09:14:05Z)
Potential business impact
Browsers may guess the type of a file and treat uploaded text as script. Low on its own; it removes one layer of defence against content-type confusion.
Technical impact
MIME type sniffing is not disabled.
Remediation
Send X-Content-Type-Options: nosniff.
Verification criteria
A rescan observes X-Content-Type-Options: nosniff.
Verification status
Verified fixed by the rescan on 2026-10-08
Status
Resolved
References
developer.mozilla.org

Checks passed

  • Valid TLS certificate with a trusted chain
  • Certificate not close to expiry (74 days remaining)
  • HTTP redirects to HTTPS
  • No mixed content on the scanned page
  • Referrer-Policy present
  • Permissions-Policy present
  • No duplicate or conflicting security headers
  • No commonly exposed files found (.git, .env, backups)
  • security.txt published
  • SPF record present
  • DMARC record present

Scope and method

  • Target: https://www.client-shop.example/ (one public website, apex and www)
  • Method: non-intrusive requests to publicly accessible pages and DNS lookups
  • Authorization: confirmed by the account holder before the assessment
  • Checks: HTTP security headers, TLS and certificate, cookies, HTTP to HTTPS redirect, SPF, DMARC, security.txt, common exposed files

Limitations

  • This is a passive configuration assessment, not a penetration test.
  • Authenticated areas, application logic, injection flaws and business-logic issues were not tested.
  • Results reflect the responses observed at the time of the assessment; a CDN or load balancer may serve different headers to other visitors.
  • Configuration examples must be tested in a staging environment before production deployment.

Create this report for a client website

The free scan shows the score and up to three complete findings. Pro produces the full report with PDF and CSV export, fix verification and monitoring.