Skip to content
https://canonical.com

Security

· 12 checks — HTTP headers, CSP, TLS handshake, and cookie hygiene rolled into one auditable list.
SCORE
77
GRADE
C
FIX
3
REVIEW
2
PASS
7
INFO
0
Checks
12
7 PASS 2 REVIEW 3 FIX
F
Content Security Policy
Action
3 of 10 CSP checks passed
FIX
3 of 10 CSP checks passed
Info::
Raw CSP policy
Got: default-src 'self'; img-src data: blob: *; script-src-elem 'self' assets.ubuntu.com www.google-analytics.com www.googletagmanager.com www.youtube.com asciinema.org player.vimeo.com script.crazyegg.com www.googleadservices.com js.zi-scripts.com *.g.doubleclick.net www.google.com www.gstatic.com www.brighttalk.com snap.licdn.com connect.facebook.net maps.googleapis.com www.redditstatic.com munchkin.marketo.net w.usabilla.com api.usabilla.com *.googlesyndication.com cdn.jsdelivr.net https://esm.sh https://cdn.jsdelivr.net buttons.github.io cdn.livechatinc.com api.livechatinc.com secure.livechatinc.com www.tfaforms.com 'unsafe-inline'; font-src 'self' assets.ubuntu.com fonts.google.com cdn.livechatinc.com secure.livechatinc.com; script-src 'self' blob: 'unsafe-eval' 'unsafe-hashes' 'unsafe-inline'; connect-src 'self' www.google.com ubuntu.com analytics.google.com www.googletagmanager.com o4510662863749120.ingest.de.sentry.io www.google-analytics.com *.crazyegg.com *.g.doubleclick.net js.zi-scripts.com *.google-analytics.com px.ads.linkedin.com ws.zoominfo.com youtube.com google.com fonts.google.com maps.googleapis.com pixel-config.reddit.com www.redditstatic.com conversions-config.reddit.com https://esm.sh https://lottie.host https://cdn.jsdelivr.net *.analytics.google.com www.facebook.com *.googlesyndication.com *.mktoresp.com assets.ubuntu.com api.github.com raw.githubusercontent.com api.livechatinc.com cdn.livechatinc.com secure.livechatinc.com web.facebook.com www.tfaforms.com; frame-src 'self' *.doubleclick.net www.youtube.com/ asciinema.org player.vimeo.com www.googletagmanager.com www.google.com www.brighttalk.com cdn.livechatinc.com secure.livechatinc.com cdn.livechat-static.com; style-src 'self' cdn.jsdelivr.net 'unsafe-inline' www.tfaforms.com; media-src 'self' res.cloudinary.com assets.ubuntu.com; child-src 'self' blob: youtube.com google.com fonts.google.com api.livechatinc.com cdn.livechatinc.com secure.livechatinc.com;
Info::
default-src directive is set
Got: default-src 'self'
Critical::
'unsafe-inline' found in script source
'unsafe-inline' allows inline <script> tags, defeating CSP against XSS. Remove it and use nonces or hashes instead.
Got: script-src 'self' blob: 'unsafe-eval' 'unsafe-hashes' 'unsafe-inline'
Critical::
'unsafe-eval' found in script source
'unsafe-eval' allows eval() and similar functions, enabling code injection. Remove it.
Got: script-src 'self' blob: 'unsafe-eval' 'unsafe-hashes' 'unsafe-inline'
Info::
No wildcard in script source
Info::
object-src falls back to default-src
Warning::
base-uri directive is missing
Without base-uri, attackers can inject a <base> tag to hijack relative URLs. Set it to 'self' or 'none'.
Expected: base-uri 'self'
Warning::
frame-ancestors directive is missing
frame-ancestors controls who can embed your page, preventing clickjacking. Set it to 'self' or 'none'.
Expected: frame-ancestors 'self'
Warning::
form-action directive is missing
form-action restricts where forms can submit data, preventing form hijacking.
Expected: form-action 'self'
Info::
upgrade-insecure-requests is not set
This directive upgrades HTTP resources to HTTPS automatically, preventing mixed content.
Expected: upgrade-insecure-requests

'unsafe-inline' allows inline <script> tags, defeating CSP against XSS. Remove it and use nonces or hashes instead.

Why this matters

Unsafe value (unsafe-inline, unsafe-eval) in script-src defeats CSP's main protection — XSS injections can execute again.

Learn more

unsafe-inline allows inline <script> tags; unsafe-eval allows eval() and similar. Both are necessary for some legacy code but explicitly dangerous. Migrate to nonces (per-page random tokens) or hashes (per-script SHA-256) instead.

Source: OWASP CSP / MDN

'unsafe-eval' allows eval() and similar functions, enabling code injection. Remove it.

Why this matters

Unsafe value (unsafe-inline, unsafe-eval) in script-src defeats CSP's main protection — XSS injections can execute again.

Learn more

unsafe-inline allows inline <script> tags; unsafe-eval allows eval() and similar. Both are necessary for some legacy code but explicitly dangerous. Migrate to nonces (per-page random tokens) or hashes (per-script SHA-256) instead.

Source: OWASP CSP / MDN

Without base-uri, attackers can inject a <base> tag to hijack relative URLs. Set it to 'self' or 'none'.

Expected: base-uri 'self'
Why this matters

Missing base-uri in CSP leaves a base-tag injection attack path open even on otherwise strict policies.

Learn more

A common omission: developers add CSP for script-src and frame-ancestors but forget base-uri. The result is a CSP that looks strict but lets an attacker rewrite every URL on the page via <base href>. Add `base-uri 'self'` to close the gap.

Source: MDN CSP

frame-ancestors controls who can embed your page, preventing clickjacking. Set it to 'self' or 'none'.

Expected: frame-ancestors 'self'
Why this matters

Security gaps expose your site and users to attacks, eroding trust.

form-action restricts where forms can submit data, preventing form hijacking.

Expected: form-action 'self'
Why this matters

Security gaps expose your site and users to attacks, eroding trust.

This directive upgrades HTTP resources to HTTPS automatically, preventing mixed content.

Expected: upgrade-insecure-requests
Why this matters

Without upgrade-insecure-requests, any HTTP subresource link survives as a mixed-content warning instead of auto-upgrading.

Learn more

Adding `upgrade-insecure-requests` to your CSP turns every http:// subresource fetch into https:// at the browser layer. One-line defense against accidental mixed content from legacy links or third-party widgets.

Source: MDN CSP

Parsed Policy

default-src 'self'
img-src data:blob:*
script-src-elem 'self'assets.ubuntu.comwww.google-analytics.comwww.googletagmanager.comwww.youtube.comasciinema.orgplayer.vimeo.comscript.crazyegg.comwww.googleadservices.comjs.zi-scripts.com*.g.doubleclick.netwww.google.comwww.gstatic.comwww.brighttalk.comsnap.licdn.comconnect.facebook.netmaps.googleapis.comwww.redditstatic.communchkin.marketo.netw.usabilla.comapi.usabilla.com*.googlesyndication.comcdn.jsdelivr.nethttps://esm.shhttps://cdn.jsdelivr.netbuttons.github.iocdn.livechatinc.comapi.livechatinc.comsecure.livechatinc.comwww.tfaforms.com'unsafe-inline'
font-src 'self'assets.ubuntu.comfonts.google.comcdn.livechatinc.comsecure.livechatinc.com
script-src 'self'blob:'unsafe-eval''unsafe-hashes''unsafe-inline'
connect-src 'self'www.google.comubuntu.comanalytics.google.comwww.googletagmanager.como4510662863749120.ingest.de.sentry.iowww.google-analytics.com*.crazyegg.com*.g.doubleclick.netjs.zi-scripts.com*.google-analytics.compx.ads.linkedin.comws.zoominfo.comyoutube.comgoogle.comfonts.google.commaps.googleapis.compixel-config.reddit.comwww.redditstatic.comconversions-config.reddit.comhttps://esm.shhttps://lottie.hosthttps://cdn.jsdelivr.net*.analytics.google.comwww.facebook.com*.googlesyndication.com*.mktoresp.comassets.ubuntu.comapi.github.comraw.githubusercontent.comapi.livechatinc.comcdn.livechatinc.comsecure.livechatinc.comweb.facebook.comwww.tfaforms.com
frame-src 'self'*.doubleclick.netwww.youtube.com/asciinema.orgplayer.vimeo.comwww.googletagmanager.comwww.google.comwww.brighttalk.comcdn.livechatinc.comsecure.livechatinc.comcdn.livechat-static.com
style-src 'self'cdn.jsdelivr.net'unsafe-inline'www.tfaforms.com
media-src 'self'res.cloudinary.comassets.ubuntu.com
child-src 'self'blob:youtube.comgoogle.comfonts.google.comapi.livechatinc.comcdn.livechatinc.comsecure.livechatinc.com
F
Subresource Integrity
Action
0 of 1 external resources have SRI
FIX
0 of 1 external resources have SRI
Warning::
External script from assets.ubuntu.com lacks integrity attribute
Without SRI, if this CDN is compromised, attackers could inject malicious code.
Got: https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js
SRI Coverage 0 / 1 of external resources have integrity hashes
TagDomainIntegrity
<script>assets.ubuntu.com Missing
D
security.txt
Action
No /.well-known/security.txt published
FIX

security.txt

No security.txt found at /.well-known/security.txt

C
Permissions-Policy
Action
1 directives, 5 missing
REVIEW
1 directives, 5 missing
Info::
interest-cohort=() — blocked for all origins
Info::
camera not restricted
Consider adding camera=() to block camera access from embedded content.
Info::
microphone not restricted
Consider adding microphone=() to block microphone access from embedded content.
Info::
geolocation not restricted
Consider adding geolocation=() to block geolocation access from embedded content.
Info::
payment not restricted
Consider adding payment=() to block payment access from embedded content.
Info::
usb not restricted
Consider adding usb=() to block usb access from embedded content.

Raw Header

interest-cohort=()

Feature Permissions

Blocked Self Only Unrestricted Not Set
interest-cohort Blocked
camera Not Set
microphone Not Set
geolocation Not Set
payment Not Set
usb Not Set
B
CORS Configuration
No CORS headers
REVIEW
No CORS headers
Info::
No CORS headers present — secure default
CORS Configuration Secure

No CORS headers detected.

Cross-origin requests are blocked by browser same-origin policy.

Origin reflection test

Some servers mirror the request Origin header, which can be exploited. Test manually:

curl -sI -H "Origin: https://evil.com" <url> | grep -i access-control
A
Security Headers
8 of 10 headers properly configured
PASS
8 of 10 headers properly configured
Info::
Strict-Transport-Security is properly configured (consider adding preload)
Got: max-age=31536000; includeSubDomains
Info::
X-Content-Type-Options is properly configured
Got: NOSNIFF
Info::
X-Frame-Options is properly configured
Got: SAMEORIGIN
Info::
Referrer-Policy is properly configured
Got: strict-origin-when-cross-origin
Info::
Permissions-Policy is set
Got: interest-cohort=()
Info::
Content-Security-Policy is present
Got: default-src 'self'; img-src data: blob: *; script-src-elem 'self' assets.ubuntu.…
Info::
Cross-Origin-Opener-Policy is set but not 'same-origin'
Got: same-origin-allow-popups Expected: same-origin
Info::
Cross-Origin-Embedder-Policy is set
Got: unsafe-none
Info::
X-Powered-By header is not present
Warning::
Server header reveals version information
The Server header discloses the software version, aiding attackers in targeting known vulnerabilities. Remove the version number.
Got: nginx/1.14.0 (Ubuntu)

The Server header discloses the software version, aiding attackers in targeting known vulnerabilities. Remove the version number.

Why this matters

Server: nginx/1.18.0 tells attackers exactly which CVEs to test — strip the version string.

Learn more

Server version disclosure helps attackers select exploits matching your stack. Configure your server to omit the version (nginx: `server_tokens off;`, Apache: `ServerTokens Prod`). Doesn't fix vulnerabilities but removes the easy reconnaissance step.

Source: OWASP

Expected: same-origin
Why this matters

COOP is set to a less-restrictive value (same-origin-allow-popups or unsafe-none) — partial isolation only.

Learn more

COOP: same-origin is the strictest level. same-origin-allow-popups allows authenticated popup windows back to your origin. unsafe-none is the legacy default (effectively off). Pick the strictest level your app's popup flows tolerate.

Source: MDN COOP

A+
TLS & Certificates
TLS 1.3, 7 checks passed
PASS
TLS 1.3, 7 checks passed
Info::
TLS 1.3 is used
Got: TLS 1.3
Info::
Strong cipher suite is used
Got: TLS_CHACHA20_POLY1305_SHA256
Info::
HTTP/2 is not negotiated
HTTP/2 provides multiplexing and header compression for better performance.
Got: http/1.1
Info::
Certificate is valid (expires in 84 days)
Got: 2026-07-16T04:13:36Z
Info::
Certificate chain has 2 certificates
Info::
Certificate uses modern signature algorithm
Got: SHA256-RSA
Info::
Certificate covers 2 domain(s)
Got: canonical.com, www.canonical.com
Info::
Certificate is issued by a trusted CA
Got: CN=R12,O=Let's Encrypt,C=US

HTTP/2 provides multiplexing and header compression for better performance.

Why this matters

HTTP/1.1 forces the browser to make sequential requests, multiplying latency on every page.

Learn more

HTTP/2 (and HTTP/3) multiplex many requests over a single connection, eliminating head-of-line blocking. HTTP/1.1 forces the browser to either queue requests or open many parallel connections — both worse. Most modern web servers support HTTP/2 with one config line.

Source: MDN Web Docs

Connection
Protocol
TLS 1.3
Cipher Suite
TLS_CHACHA20_POLY1305_SHA256
HTTP Version
HTTP/1.1

Certificate Chain

Leaf Certificate
Subject CN=www.canonical.comIssuer CN=R12,O=Let's Encrypt,C=USValid 2026-04-17T04:13:37Z → 2026-07-16T04:13:36ZExpires in 84 days SANs canonical.com, www.canonical.comSignature SHA256-RSASerial 6e3aa9bf50f525d44e47af73aeda8d038e2
Intermediate (CA Certificate)
Subject CN=R12,O=Let's Encrypt,C=USIssuer CN=ISRG Root X1,O=Internet Security Research Group,C=USValid 2024-03-13T00:00:00Z → 2027-03-12T23:59:59ZExpires in 324 days Signature SHA256-RSASerial c212324b70a9b49171dc40f7e285263c
A+
Cookie Security
No cookies set — no cookie security risks
PASS
No cookies set — no cookie security risks
Info::
No cookies set — no cookie security risks

No cookies detected — no cookie security risks to report.

A+
JS Library Vulnerabilities
No known vulnerabilities
PASS
No known vulnerabilities
Info::
No known JavaScript library vulnerabilities detected

No known JavaScript library vulnerabilities detected.

A+
Information Leakage
No exposures
PASS
No exposures
Info::
No security.txt found
Consider adding a security.txt at /.well-known/security.txt.
Info::
No sensitive files exposed

No sensitive files exposed — all paths returned 404.

PathStatusCategoryRisk
/.git/HEAD Not foundVersion Control
/.git/config Not foundVersion Control
/.svn/entries Not foundVersion Control
/.env Not foundConfiguration
/.env.local Not foundConfiguration
/.env.production Not foundConfiguration
/wp-config.php Not foundConfiguration
/.htaccess Not foundConfiguration
/phpinfo.php Not foundDebug
/server-status Not foundDebug
/server-info Not foundDebug
/.well-known/security.txt Not foundSecurity Policy
A+
Email Security
DMARC: reject
PASS
DMARC: reject
Info::
DMARC policy is reject — strongest protection
DMARC
Policy reject — strongest protection Record v=DMARC1; p=reject; pct=100; rua=mailto:dmarc-rua@admin.canonical.com
A
Transport Security
HTTP/3, HSTS, and TLS version analysis
PASS
HTTP/3, HSTS, and TLS version analysis
Info::
HTTP/3 (QUIC) not advertised
HTTP/3 eliminates head-of-line blocking. If your CDN supports it, consider enabling it.
Info::
HSTS enabled (includeSubDomains)
Info::
TLS 1.3 in use (fastest handshake, 1-RTT)
All checks on this page are automated. Results are estimates - run targeted manual reviews when the score affects a release decision.

Send Feedback