Security
· 33 checks — HTTP headers, CSP, TLS handshake, and cookie hygiene rolled into one auditable list.DContent Security PolicyAction4 of 10 CSP checks passedFIX
'unsafe-inline' allows inline <script> tags, defeating CSP against XSS. Remove it and use nonces or hashes instead.
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
default-src provides a fallback for other directives. Set it to restrict default resource loading.
default-src 'self'Security gaps expose your site and users to attacks, eroding trust.
Without base-uri, attackers can inject a <base> tag to hijack relative URLs. Set it to 'self' or 'none'.
base-uri 'self'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'.
frame-ancestors 'self'Security gaps expose your site and users to attacks, eroding trust.
form-action restricts where forms can submit data, preventing form hijacking.
form-action 'self'Security gaps expose your site and users to attacks, eroding trust.
Parsed Policy
FSubresource Integrity AdoptionAction0% SRI adoption (1/141 third-party resources)FIX
DSubresource IntegrityAction1 of 141 external resources have SRIFIX
| Tag | Domain | Integrity |
|---|---|---|
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <link> | css.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | client.px-cloud.net | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | roblox.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | apis.roblox.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | js.rbxcdn.com | ✗ Missing |
| <script> | static.cloudflareinsights.com | ✓ Protected |
FEmail SecurityActionno DMARC, no SPFFIX
No DMARC record found
Without DMARC, email receivers have no policy for handling authentication failures from your domain.
Without DMARC, email receivers have no policy for handling authentication failures. Add a TXT record at _dmarc.<domain> starting with v=DMARC1.
Without DMARC, anyone can send phishing emails using your domain name.
Learn more ▾ ▴
DMARC tells receiving mail servers what to do with email that fails SPF/DKIM checks for your domain. With a strict 'p=reject' policy, spoofed emails get bounced; without it they reach the inbox. Domains used in phishing campaigns lose deliverability and brand trust fast.
Source: DMARC.org / NIST
Without SPF (Sender Policy Framework), receivers can't tell which servers are authorized to send mail for your domain. Add a TXT record at the apex starting with v=spf1, ending in -all.
Security gaps expose your site and users to attacks, eroding trust.
DKIM signs outbound mail to prove origin. We probed common selectors (default, google, selector1, etc.) without finding a record. If you use a non-standard selector, this is a false negative.
No DKIM signature on outbound mail — receivers can't cryptographically prove the message came from your domain.
Learn more ▾ ▴
DKIM signs outbound mail with a private key whose public half lives in DNS at <selector>._domainkey.<domain>. Without DKIM, DMARC alone can't tell legitimate mail from spoofs, and large mailbox providers (Gmail, Yahoo) increasingly require DKIM for inbox placement. Note: this check probes a curated list of common selectors; non-standard selectors produce a false negative.
Source: RFC 6376 / Google + Yahoo 2024 sender requirements
MTA-STS forces inbound mail to use TLS, preventing downgrade attacks. Requires both a TXT record at _mta-sts.<domain> and a policy file at https://mta-sts.<domain>/.well-known/mta-sts.txt.
Without MTA-STS, inbound mail can be silently downgraded to plain SMTP by a network attacker.
Learn more ▾ ▴
MTA-STS (RFC 8461) tells sending mail servers to use TLS and to refuse delivery if TLS fails. Requires both a TXT record at _mta-sts.<domain> AND a policy file at https://mta-sts.<domain>/.well-known/mta-sts.txt. Without it, an active attacker on the network path can strip STARTTLS and read the email in plaintext.
Source: RFC 8461
TLS-RPT (RFC 8460) lets MTAs report TLS-handshake failures, so you can detect and fix MTA-STS misconfigurations. Add a TXT record at _smtp._tls.<domain>.
Without TLS-RPT, you have no visibility into inbound TLS failures — MTA-STS misconfigurations stay hidden until users complain.
Learn more ▾ ▴
TLS-RPT (RFC 8460) is the feedback channel for MTA-STS: senders post aggregate reports of TLS-handshake failures to the URI in your _smtp._tls TXT record. Without it, an MTA-STS misconfiguration silently rejects mail and you find out only when someone notices missing email.
Source: RFC 8460
BIMI (Brand Indicators for Message Identification) lets supporting clients (Gmail, Apple Mail, Yahoo) display your verified logo next to your messages. Optional but raises trust signals. Requires DMARC at p=quarantine or p=reject to be honored.
Security gaps expose your site and users to attacks, eroding trust.
DPermissions-PolicyActionNo header setFIX
No Permissions-Policy header set.
Without this header, embedded iframes can request access to sensitive device features.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()
CSecurity HeadersAction4 of 10 headers properly configuredREVIEW
Without includeSubDomains, subdomains can still be accessed over HTTP.
max-age=31536000; includeSubDomainsWithout includeSubDomains, a forgotten dev subdomain over HTTP can set malicious cookies that ride to the apex.
Learn more ▾ ▴
HSTS without includeSubDomains protects only the exact domain. Cookies set on a non-HSTS subdomain can ride to the apex via cookie-scope attacks. The fix is one directive append. Verify all subdomains support HTTPS first — adding includeSubDomains to a domain with HTTP-only subdomains breaks them.
Source: RFC 6797
This header prevents MIME-type sniffing, which can lead to XSS attacks. Set it to 'nosniff'.
nosniffMIME sniffing lets browsers run uploaded files as JavaScript, turning a file upload into an XSS.
Learn more ▾ ▴
Setting X-Content-Type-Options: nosniff tells browsers to trust your declared Content-Type instead of guessing. Without it, an attacker who uploads a polyglot file can sometimes get it executed as a script. One header, no downside.
Source: OWASP / MDN
Controls how much referrer information is sent with requests. Set to 'strict-origin-when-cross-origin' or stricter.
strict-origin-when-cross-originDefault browser behavior leaks full URLs (including query params and tokens) to every third-party resource — set a strict policy.
Learn more ▾ ▴
Without a Referrer-Policy header, browsers send the full referring URL with images, scripts, and fonts loaded from third-party origins. URLs containing tokens, user IDs, or session params end up in third-party logs. Set `Referrer-Policy: strict-origin-when-cross-origin` (or stricter) to limit leakage.
Source: MDN / W3C
Controls which browser features (camera, microphone, geolocation) are allowed. Set it to restrict unused features.
geolocation=(), camera=(), microphone=()Permissions-Policy locks down browser APIs you don't use — without it, every page can request camera/mic/geolocation if XSS lands.
Learn more ▾ ▴
By default every page can request the camera, microphone, geolocation, payment APIs, and dozens more. Permissions-Policy turns off the ones you don't need so a future bug can't quietly start using them. It's a defense-in-depth header — one line, big surface reduction.
Source: MDN / W3C
COEP prevents loading cross-origin resources without explicit permission. Required for SharedArrayBuffer and high-resolution timers.
require-corpCOEP enforces that all embedded resources opt-in to cross-origin embedding — required for cross-origin isolation features.
Learn more ▾ ▴
Cross-Origin-Embedder-Policy: require-corp ensures every embedded resource (script, iframe, image) explicitly allows being loaded cross-origin. Combined with COOP, this enables the cross-origin-isolated context that unlocks SharedArrayBuffer, high-resolution timers, and other powerful APIs.
Source: MDN / web.dev
same-originCOOP 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
CCross-Origin Tab SafetyAction2 of 21 new-tab link(s) missing rel=noopenerREVIEW
BTrusted Types (XSS Sink Hardening)Trusted Types not enabledREVIEW
CPermissions-Policy GranularityActionNo Permissions-Policy header set -- powerful features (camera / microphone / geolocation / payment / USB) default to allow-on-same-originREVIEW
BReferrer-Policy StrictnessReferrer-Policy header not set -- browser default applies (modern: strict-origin-when-cross-origin; legacy browsers: no-referrer-when-downgrade)REVIEW
BCORS ConfigurationNo CORS headersREVIEW
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
CKnown vulnerability matchesAction31 known vulnerability match(es) against detected techREVIEW
Known Vulnerabilities
| Library | Version | Severity | Summary | Fixed In |
|---|---|---|---|---|
| AngularJS | 1.6.3 | high | Prototype pollution | 1.7.9 |
| AngularJS | 1.6.3 | high | angular vulnerable to super-linear runtime due to backtracking | 1.8.4 |
| AngularJS | 1.6.3 | medium | XSS via JQLite DOM manipulation functions in AngularJS | 1.8.0 |
| jQuery | 1.11.1 | medium | parseHTML() executes scripts in event handlers | 2.2.0 |
| jQuery | 1.11.1 | medium | 3rd party CORS request may execute | 1.12.0 |
| Bootstrap | 3.3.5 | medium | XSS is possible in the data-target attribute. | 3.4.0 |
| Bootstrap | 3.3.5 | medium | XSS in collapse data-parent attribute | 3.4.0 |
| Bootstrap | 3.3.5 | medium | XSS in data-target property of scrollspy | 3.4.0 |
| Bootstrap | 3.3.5 | medium | XSS in data-container property of tooltip | 3.4.0 |
| Bootstrap | 3.3.5 | medium | In Bootstrap before 3.4.0, XSS is possible in the tooltip data-viewport attribute. | 3.4.0 |
| Bootstrap | 3.3.5 | medium | In Bootstrap before 3.4.0, XSS is possible in the affix configuration target property. | 3.4.0 |
| jQuery | 1.11.1 | medium | jQuery before 3.4.0, as used in Drupal, Backdrop CMS, and other products, mishandles jQuery.extend(true, {}, ...) because of Object.prototype pollution | 3.4.0 |
| Bootstrap | 3.3.5 | medium | XSS in data-template, data-content and data-title properties of tooltip/popover | 3.4.1 |
| jQuery | 1.11.1 | medium | Regex in its jQuery.htmlPrefilter sometimes may introduce XSS | 3.5.0 |
| jQuery | 1.11.1 | medium | passing HTML containing <option> elements from untrusted sources - even after sanitizing it - to one of jQuery's DOM manipulation methods (i.e. .html(), .append(), and others) may execute untrusted code. | 3.5.0 |
| AngularJS | 1.6.3 | medium | XSS may be triggered in AngularJS applications that sanitize user-controlled HTML snippets before passing them to JQLite methods like JQLite.prepend, JQLite.after, JQLite.append, JQLite.replaceWith, JQLite.append, new JQLite and angular.element. | 1.8.0 |
| AngularJS | 1.6.3 | medium | Angular (deprecated package) Cross-site Scripting | 1.8.4 |
| AngularJS | 1.6.3 | medium | angular vulnerable to regular expression denial of service via the angular.copy() utility | 1.8.4 |
| AngularJS | 1.6.3 | medium | angular vulnerable to regular expression denial of service via the $resource service | 1.8.4 |
| AngularJS | 1.6.3 | medium | angular vulnerable to regular expression denial of service via the <input type="url"> element | 1.8.4 |
| Bootstrap | 3.3.5 | medium | Bootstrap Cross-Site Scripting (XSS) vulnerability for data-* attributes | 3.4.1 |
| AngularJS | 1.6.3 | medium | AngularJS Incomplete Filtering of Special Elements vulnerability | 1.8.4 |
| AngularJS | 1.6.3 | medium | AngularJS Regular expression Denial of Service (ReDoS) | 1.9.9 |
| AngularJS | 1.6.3 | low | XSS in $sanitize in Safari/Firefox | 1.6.5 |
| AngularJS | 1.6.3 | low | XSS through SVG if enableSvg is set | 1.6.9 |
| AngularJS | 1.6.3 | low | End-of-Life: Long term support for AngularJS has been discontinued as of December 31, 2021 | 1.999 |
| Bootstrap | 3.3.5 | low | Bootstrap before 4.0.0 is end-of-life and no longer maintained. | 3.999.999 |
| jQuery | 1.11.1 | low | jQuery 1.x and 2.x are End-of-Life and no longer receiving security updates | 2.999.999 |
| AngularJS | 1.6.3 | low | AngularJS allows attackers to bypass common image source restrictions | 1.8.4 |
| AngularJS | 1.6.3 | low | AngularJS allows attackers to bypass common image source restrictions | 1.8.4 |
| AngularJS | 1.6.3 | low | AngularJS improperly sanitizes SVG elements | 1.8.4 |
A+TLS & CertificatesTLS 1.3, 9 checks passedPASS
Certificate Chain
AWAF / Bot ProtectionCloudflarePASS
Asecurity.txtVulnerability disclosure policyPASS
security.txt
A+CSP Inline-Style ReadinessNo inline style attributes -- strict CSP is feasiblePASS
A+Bot Challenge DetectionScan reached real page content (no bot-protection interstitial)PASS
A+Soft-404 DetectionNo soft-404 patterns detected in page title or headingsPASS
A+Empty Page DetectionPage has substantive body text and no placeholder / template-leak signalsPASS
A+Geo-Restriction DetectionNo geo-restriction signals detected -- scan reached the page from an allowed regionPASS
A+Maintenance Mode DetectionNo maintenance-mode signals detected -- scan reached a normal pagePASS
A+CORS DepthNo CORS response headers -- the resource is same-origin-only by browser defaultPASS
A+Source Map ExposureNo source maps accessible (probed 1 candidate URL(s))PASS
A+HTML Version DisclosureNo software-version disclosures in HTMLPASS
A+Open Redirect SurfaceNo redirect-shaped query parameters in DOM linksPASS
A+Auth SecurityPage is not a login form -- auth-security checks are N/APASS
A+Subdomain Inventory ExposureNo risky subdomain names in certificate SANsPASS
A+JS Library VulnerabilitiesNo known vulnerabilitiesPASS
No known JavaScript library vulnerabilities detected.
A+Information LeakageNo exposuresPASS
No sensitive files exposed — all paths returned 404.
| Path | Status | Category | Risk |
|---|---|---|---|
| /.git/HEAD | ✓ Not found | Version Control | — |
| /.git/config | ✓ Not found | Version Control | — |
| /.svn/entries | ✓ Not found | Version Control | — |
| /.env | ✓ Not found | Configuration | — |
| /.env.local | ✓ Not found | Configuration | — |
| /.env.production | ✓ Not found | Configuration | — |
| /wp-config.php | ✓ Not found | Configuration | — |
| /.htaccess | ✓ Not found | Configuration | — |
| /phpinfo.php | ✓ Not found | Debug | — |
| /server-status | ✓ Not found | Debug | — |
| /server-info | ✓ Not found | Debug | — |
| /.well-known/security.txt | ✗ Exposed | Security Policy | Info |
| /package.json | ✓ Not found | dependency-manifest | — |
| /composer.json | ✓ Not found | dependency-manifest | — |
| /Gemfile | ✓ Not found | dependency-manifest | — |
| /Gemfile.lock | ✓ Not found | dependency-manifest | — |
| /requirements.txt | ✓ Not found | dependency-manifest | — |
| /pom.xml | ✓ Not found | dependency-manifest | — |
| /.gitlab-ci.yml | ✓ Not found | ci-config | — |
| /.travis.yml | ✓ Not found | ci-config | — |