Skip to content
https://vercel.com

Security

· 32 checks — HTTP headers, CSP, TLS handshake, and cookie hygiene rolled into one auditable list.
SCORE
86
GRADE
B
FIX
3
REVIEW
8
PASS
21
INFO
0
Checks
32
21 PASS 8 REVIEW 3 FIX
D
Content Security Policy
Action
4 of 10 CSP checks passed
FIX
4 of 10 CSP checks passed
Info::
Raw CSP policy
Got: default-src 'self' vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/*;script-src 'self' 'unsafe-eval' 'unsafe-inline' 'inline-speculation-rules' https://snap.licdn.com https://www.youtube.com cdn.vercel-insights.com va.vercel-scripts.com vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/* cdp.vercel.com;style-src 'self' 'unsafe-inline' vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/*;img-src 'self' blob: data: *.github.io avatars.githubusercontent.com user-images.githubusercontent.com vercel.com vercel.live *.vercel.sh assets.vercel.com cdn.raster.app https://images.ctfassets.net https://www.google.com https://i.ytimg.com https://s3.amazonaws.com pbs.twimg.com https://www.gravatar.com https://lishhsx6kmthaacj.public.blob.vercel-storage.com https://fvqcrhkhgatlyl2m.public.blob.vercel-storage.com;media-src 'self' blob: data: vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/*;connect-src 'self' data: *.ingest.sentry.io *.ingest.us.sentry.io wss://ws-us3.pusher.com sockjs-use3.pusher.com react-tweet.vercel.app https://*.contentful.com www.vercel-status.com unpkg.com vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/* cdp.vercel.com;font-src 'self' vercel.com assets.vercel.com vercel.live fonts.gstatic.com *.vercel.sh;frame-ancestors 'self' https://vercel.com https://app.contentful.com https://*.contentful.com https://*.vercel.sh https://*.vercel.com
Info::
default-src directive is set
Got: default-src 'self' vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/*
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' 'unsafe-eval' 'unsafe-inline' 'inline-speculation-rules' https://snap.licdn.com https://www.youtube.com cdn.vercel-insights.com va.vercel-scripts.com vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/* cdp.vercel.com
Critical::
'unsafe-eval' found in script source
'unsafe-eval' allows eval() and similar functions, enabling code injection. Remove it.
Got: script-src 'self' 'unsafe-eval' 'unsafe-inline' 'inline-speculation-rules' https://snap.licdn.com https://www.youtube.com cdn.vercel-insights.com va.vercel-scripts.com vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.live wss://*.vercel.com *.codesandbox.io localhost:* chrome-extension://* https://www.youtube-nocookie.com https://risk.clearbit.com https://react-tweet.vercel.app/* cdp.vercel.com
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'
Info::
frame-ancestors directive is set
Got: frame-ancestors 'self' https://vercel.com https://app.contentful.com https://*.contentful.com https://*.vercel.sh https://*.vercel.com
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

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'vercel.com*.vercel.comassets.vercel.com*.vercel.shvercel.livewss://*.vercel.com*.codesandbox.iolocalhost:*chrome-extension://*https://www.youtube-nocookie.comhttps://risk.clearbit.comhttps://react-tweet.vercel.app/*
script-src 'self''unsafe-eval''unsafe-inline''inline-speculation-rules'https://snap.licdn.comhttps://www.youtube.comcdn.vercel-insights.comva.vercel-scripts.comvercel.com*.vercel.comassets.vercel.com*.vercel.shvercel.livewss://*.vercel.com*.codesandbox.iolocalhost:*chrome-extension://*https://www.youtube-nocookie.comhttps://risk.clearbit.comhttps://react-tweet.vercel.app/*cdp.vercel.com
style-src 'self''unsafe-inline'vercel.com*.vercel.comassets.vercel.com*.vercel.shvercel.livewss://*.vercel.com*.codesandbox.iolocalhost:*chrome-extension://*https://www.youtube-nocookie.comhttps://risk.clearbit.comhttps://react-tweet.vercel.app/*
img-src 'self'blob:data:*.github.ioavatars.githubusercontent.comuser-images.githubusercontent.comvercel.comvercel.live*.vercel.shassets.vercel.comcdn.raster.apphttps://images.ctfassets.nethttps://www.google.comhttps://i.ytimg.comhttps://s3.amazonaws.compbs.twimg.comhttps://www.gravatar.comhttps://lishhsx6kmthaacj.public.blob.vercel-storage.comhttps://fvqcrhkhgatlyl2m.public.blob.vercel-storage.com
media-src 'self'blob:data:vercel.com*.vercel.comassets.vercel.com*.vercel.shvercel.livewss://*.vercel.com*.codesandbox.iolocalhost:*chrome-extension://*https://www.youtube-nocookie.comhttps://risk.clearbit.comhttps://react-tweet.vercel.app/*
connect-src 'self'data:*.ingest.sentry.io*.ingest.us.sentry.iowss://ws-us3.pusher.comsockjs-use3.pusher.comreact-tweet.vercel.apphttps://*.contentful.comwww.vercel-status.comunpkg.comvercel.com*.vercel.comassets.vercel.com*.vercel.shvercel.livewss://*.vercel.com*.codesandbox.iolocalhost:*chrome-extension://*https://www.youtube-nocookie.comhttps://risk.clearbit.comhttps://react-tweet.vercel.app/*cdp.vercel.com
font-src 'self'vercel.comassets.vercel.comvercel.livefonts.gstatic.com*.vercel.sh
frame-ancestors 'self'https://vercel.comhttps://app.contentful.comhttps://*.contentful.comhttps://*.vercel.shhttps://*.vercel.com
F
Permissions-Policy Granularity
Action
0% high-risk feature coverage (0/10)
FIX
0% high-risk feature coverage (0/10)
Warning::
Permissions-Policy covers 0/10 high-risk features (0%)
The Permissions-Policy header explicitly declares policies for 0/10 high-risk features. Covered: Not declared (default-allow): camera, microphone, geolocation, payment, usb, serial, midi, accelerometer, gyroscope, magnetometer The non-declared features fall back to their spec-default policy (usually `self`), which means an XSS-injected or compromised iframe could request them. For features the page genuinely doesn't use, declare `feature=()` to fully close them.
Got: 0% (0/10)
D
Referrer-Policy Strictness
Action
Referrer-Policy is `origin-when-cross-origin` (leaky -- origin sent cross-origin even on protocol downgrade)
FIX
Referrer-Policy is `origin-when-cross-origin` (leaky -- origin sent cross-origin even on protocol downgrade)
Warning::
Referrer-Policy: `origin-when-cross-origin` -- leaky -- origin sent cross-origin even on protocol downgrade
Same-origin requests get full URL; cross-origin gets only origin. Similar shape to the modern default BUT does NOT suppress Referer on HTTPS-to-HTTP downgrade -- the origin leaks even when the protocol is downgrading to HTTP. Switch to `strict-origin-when-cross-origin` for the same UX with no downgrade leak.
Got: origin-when-cross-origin
C
Security Headers
Action
5 of 10 headers properly configured
REVIEW
5 of 10 headers properly configured
Info::
Strict-Transport-Security is properly configured
Got: max-age=31536000; includeSubDomains; preload
Info::
X-Content-Type-Options is properly configured
Got: nosniff
Info::
X-Frame-Options is properly configured
Got: DENY
Warning::
Referrer-Policy has a weak value
Got: origin-when-cross-origin Expected: strict-origin-when-cross-origin
Warning::
Permissions-Policy header is missing
Controls which browser features (camera, microphone, geolocation) are allowed. Set it to restrict unused features.
Expected: geolocation=(), camera=(), microphone=()
Info::
Content-Security-Policy is present
Got: default-src 'self' vercel.com *.vercel.com assets.vercel.com *.vercel.sh vercel.…
Warning::
Cross-Origin-Opener-Policy header is missing
COOP isolates your browsing context, preventing cross-origin side-channel attacks. Set to 'same-origin'.
Expected: same-origin
Warning::
Cross-Origin-Embedder-Policy header is missing
COEP prevents loading cross-origin resources without explicit permission. Required for SharedArrayBuffer and high-resolution timers.
Expected: require-corp
Warning::
X-Powered-By header reveals technology stack
This header discloses server technology (e.g. Express, PHP), helping attackers target known vulnerabilities. Remove it.
Got: Next.js, Payload
Info::
Server header is present without version info
Got: Vercel
Info::
Domain is in the Chrome HSTS preload list (status: preloaded)
Got: preloaded
Expected: strict-origin-when-cross-origin
Why this matters

Weak Referrer-Policy values leak full URLs (with query params, tokens, IDs) to every third-party resource on the page.

Learn more ▾

Default referrer behavior shares the full referring URL with images, scripts, and other resources from third-party origins. If your URLs contain tokens, session IDs, or user emails (in query strings or paths), every third-party tracker gets them. Set `Referrer-Policy: strict-origin-when-cross-origin` (or stricter).

Source: MDN Referrer-Policy / W3C

Controls which browser features (camera, microphone, geolocation) are allowed. Set it to restrict unused features.

Expected: geolocation=(), camera=(), microphone=()
Why this matters

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

COOP isolates your browsing context, preventing cross-origin side-channel attacks. Set to 'same-origin'.

Expected: same-origin
Why this matters

COOP isolates your top-level browsing context from cross-origin windows — without it, popup-based side-channel attacks remain possible.

Learn more ▾

Cross-Origin-Opener-Policy: same-origin prevents cross-origin pages from sharing a browsing-context group with yours. This blocks cross-window references that enable Spectre-style timing attacks and tab-nabbing. Required if you want to enable SharedArrayBuffer.

Source: MDN / web.dev

COEP prevents loading cross-origin resources without explicit permission. Required for SharedArrayBuffer and high-resolution timers.

Expected: require-corp
Why this matters

COEP 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

This header discloses server technology (e.g. Express, PHP), helping attackers target known vulnerabilities. Remove it.

Why this matters

X-Powered-By: PHP/7.4.3 advertises your stack to attackers — disable it.

Learn more ▾

X-Powered-By and similar headers (X-AspNet-Version, X-Runtime) tell attackers which versions to target. Disable in your server/framework config: PHP `expose_php=Off`, ASP.NET `<httpRuntime enableVersionHeader="false">`, Express `app.disable('x-powered-by')`.

Source: OWASP

B
WAF / Bot Protection
No WAF detected via response headers
REVIEW
No WAF detected via response headers
Info::
No WAF detected
Response headers don't match any known WAF or bot-management product. Sites exposed to abuse (login, signup, payment) typically benefit from a WAF such as Cloudflare, Akamai, AWS WAF, or Imperva.
C
CSP Inline-Style Readiness
Action
46 inline style attribute(s) detected
REVIEW
46 inline style attribute(s) detected
Warning::
46 inline style attribute(s) detected
Each `style=""` attribute forces `style-src 'unsafe-inline'` in any Content-Security-Policy, which negates most of CSP's XSS-mitigation value. 46 inline style(s) is moderate. Affected element types include: div, svg, span, a, button. Move styles to a stylesheet; use CSS custom properties for runtime-dynamic values; or adopt a nonce/hash CSP policy. Most teams take the stylesheet path because it's also a maintainability win.
B
Trusted Types (XSS Sink Hardening)
Trusted Types not enabled
REVIEW
Trusted Types not enabled
Info::
Trusted Types not enabled
Trusted Types (CSP3) is a Chrome 83+ defense that requires DOM-XSS sinks (innerHTML, document.write, eval, ...) to receive a typed-and-sanitized value rather than a raw string. Adding `Content-Security-Policy: require-trusted-types-for 'script'; trusted-types default` neutralizes most DOM-XSS even when a payload reaches a sink. Adoption is currently ~0.1% of pages so this is informational; a roll-out usually starts in report-only mode.
B
Email Security
DMARC: quarantine, SPF: ~all, DKIM, BIMI
REVIEW
DMARC: quarantine, SPF: ~all, DKIM, BIMI
Info::
DMARC policy is quarantine — good protection
Info::
SPF ends in ~all (soft fail)
Soft fail tells receivers to accept-but-mark unauthorized mail. Migrate to -all once you've confirmed all legitimate senders are listed (DMARC aggregate reports help verify).
Info::
DKIM configured (selectors: k1, google, s2, s1)
Info::
MTA-STS not configured
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.
Info::
TLS-RPT not configured
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>.
Info::
BIMI configured and DMARC enforced — logo will display
DMARC
Policy quarantine — good protection Record v=DMARC1; p=quarantine; rua=mailto:df9481016e14030@rep.dmarcanalyzer.com; ruf=mailto:df9481016e14030@for.dmarcanalyzer.com; pct=100; fo=1;

Soft fail tells receivers to accept-but-mark unauthorized mail. Migrate to -all once you've confirmed all legitimate senders are listed (DMARC aggregate reports help verify).

Why this matters

Informational: a labeled value pair from the audit.

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.

Why this matters

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>.

Why this matters

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

B
API Surface
1 OpenAPI/Swagger spec exposed
REVIEW
1 OpenAPI/Swagger spec exposed
Warning::
OpenAPI / Swagger spec exposed at /openapi.json
An openly-accessible OpenAPI / Swagger spec hands attackers the complete endpoint catalog: every path, parameter, request body, and response shape. Internal-only APIs should restrict the spec to authenticated developers; public APIs should accept the disclosure as documentation. Either is a deliberate choice -- the warning surfaces the choice rather than dictating it.
C
Permissions-Policy
Action
0 directives, 5 missing
REVIEW
0 directives, 5 missing
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

fullscreen 'self'; camera 'none'

Feature Permissions

Blocked Self Only Unrestricted Not Set
camera Not Set
microphone Not Set
geolocation Not Set
payment Not Set
usb Not Set
C
CORS Configuration
Action
Origin: *
REVIEW
Origin: *
Info::
Access-Control-Allow-Origin: * — unrestricted
Any website can read this resource's response. Appropriate for public APIs but not for user-specific content.
Info::
Origin reflection not testable with a single request
Some servers reflect the request Origin header. This requires manual testing with a crafted Origin header.
CORS Configuration Permissive
Allow-Origin *

Any website can read responses from this resource.

HeaderValueStatus
Access-Control-Allow-Origin*⚠

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+
TLS & Certificates
TLS 1.3, 8 checks passed
PASS
TLS 1.3, 8 checks passed
Info::
TLS 1.3 is used
Got: TLS 1.3
Info::
Strong cipher suite is used
Got: TLS_AES_128_GCM_SHA256
Info::
HTTP/2 is negotiated
Got: h2
Info::
OCSP stapling not enabled
Without stapling, the browser performs a separate OCSP roundtrip on first connection -- adding latency and leaking the visited host to the CA. Enable OCSP stapling on your TLS server.
Info::
Certificate is valid (expires in 55 days)
Got: 2026-10-22T06:47:25Z
Info::
Certificate chain has 3 certificates
Info::
Certificate uses modern signature algorithm
Got: SHA256-RSA
Info::
Certificate covers 2 domain(s)
Got: *.vercel.com, vercel.com
Info::
Certificate is issued by a trusted CA
Got: CN=YR2,O=Let's Encrypt,C=US

Without stapling, the browser performs a separate OCSP roundtrip on first connection -- adding latency and leaking the visited host to the CA. Enable OCSP stapling on your TLS server.

Why this matters

Without OCSP stapling, every first-time visitor pays an extra OCSP roundtrip — and the CA learns who's visiting your site.

Learn more ▾

OCSP stapling has the server fetch its own revocation status from the CA and attach the signed response to the TLS handshake. Without it, browsers contact the CA directly: extra latency for the user and a privacy leak (the CA sees who connected). Enable ssl_stapling on (nginx) / SSLUseStapling On (Apache) / OCSPStapling = on (Caddy auto-enables).

Source: RFC 6961 / Mozilla Server-Side TLS guide

Connection
Protocol
TLS 1.3
Cipher Suite
TLS_AES_128_GCM_SHA256
HTTP Version
h2 (HTTP/2)

Certificate Chain

Leaf Certificate
Subject CN=*.vercel.comIssuer CN=YR2,O=Let's Encrypt,C=USValid 2026-07-24T06:47:26Z → 2026-10-22T06:47:25ZExpires in 55 days SANs *.vercel.com, vercel.comSignature SHA256-RSASerial 6ae5bcce639f382da202570bbdb7aee3ac6
Intermediate (CA Certificate)
Subject CN=YR2,O=Let's Encrypt,C=USIssuer CN=Root YR,O=ISRG,C=USValid 2025-09-03T00:00:00Z → 2028-09-02T23:59:59ZExpires in 737 days Signature SHA256-RSASerial 4ebd24947e24d394802d84a52fd5b319
Intermediate (CA Certificate)
Subject CN=Root YR,O=ISRG,C=USIssuer CN=ISRG Root X1,O=Internet Security Research Group,C=USValid 2026-05-13T00:00:00Z → 2032-09-02T23:59:59ZExpires in 2198 days Signature SHA256-RSASerial f24b6d17f9d9ad7cb1c9fea78782699f
A
Cookie Security
3 cookies analyzed, 6 checks passed
PASS
3 cookies analyzed, 6 checks passed
Info::
Cookie '_v-consent' has the Secure flag
Warning::
Cookie '_v-consent' is missing the HttpOnly flag
Without HttpOnly, this cookie can be accessed by JavaScript, making it vulnerable to XSS-based theft.
Info::
Cookie '_v-consent' has SameSite=Lax
Info::
Cookie '_v-anonymous-id' has the Secure flag
Warning::
Cookie '_v-anonymous-id' is missing the HttpOnly flag
Without HttpOnly, this cookie can be accessed by JavaScript, making it vulnerable to XSS-based theft.
Info::
Cookie '_v-anonymous-id' has SameSite=Lax
Info::
Cookie '_v-anonymous-id-renewed' has the Secure flag
Warning::
Cookie '_v-anonymous-id-renewed' is missing the HttpOnly flag
Without HttpOnly, this cookie can be accessed by JavaScript, making it vulnerable to XSS-based theft.
Info::
Cookie '_v-anonymous-id-renewed' has SameSite=Lax
3 cookies analyzed 3 warnings
NameSecureHttpOnlySameSiteSizeIssues
_v-consent✓✗Lax137 B1
_v-anonymous-id✓✗Lax36 B2
_v-anonymous-id-renewed✓✗Lax24 B1
A+
security.txt
Vulnerability disclosure policy
PASS
Vulnerability disclosure policy
Info::
security.txt found
Got: https://vercel.com/.well-known/security.txt

security.txt

Contact: https://hackerone.com/vercel-open-source, mailto:responsible.disclosure@vercel.com
Expires: 2027-05-27T12:00:00.000Z
Policy: https://vercel.com/.well-known/security.txt
A+
Cross-Origin Tab Safety
All 21 new-tab link(s) carry rel=noopener
PASS
All 21 new-tab link(s) carry rel=noopener
Info::
All 21 new-tab link(s) carry rel=noopener
A+
Bot Challenge Detection
Scan reached real page content (no bot-protection interstitial)
PASS
Scan reached real page content (no bot-protection interstitial)
Info::
No bot-protection interstitial detected -- the rest of the report reflects the real page
A+
Soft-404 Detection
No soft-404 patterns detected in page title or headings
PASS
No soft-404 patterns detected in page title or headings
Info::
No soft-404 patterns detected in page title or headings
A+
Empty Page Detection
Page has substantive body text and no placeholder / template-leak signals
PASS
Page has substantive body text and no placeholder / template-leak signals
Info::
Page has substantive body text and no placeholder / template-leak signals
A+
Geo-Restriction Detection
No geo-restriction signals detected -- scan reached the page from an allowed region
PASS
No geo-restriction signals detected -- scan reached the page from an allowed region
Info::
No geo-restriction detected
A+
Maintenance Mode Detection
No maintenance-mode signals detected -- scan reached a normal page
PASS
No maintenance-mode signals detected -- scan reached a normal page
Info::
No maintenance-mode signals detected
A+
Subresource Integrity Adoption
Page has no third-party scripts or stylesheets -- SRI not applicable
PASS
Page has no third-party scripts or stylesheets -- SRI not applicable
Info::
No third-party scripts or stylesheets to protect with SRI
A
CORS Depth
1 CORS depth signal(s) detected
PASS
1 CORS depth signal(s) detected
Info::
CORS allows any origin (`Access-Control-Allow-Origin: *`)
Any website can fetch this URL via JavaScript and read the response body. Acceptable for genuinely public APIs (e.g. CDN-served static assets). Risky if the URL returns user-specific or session-derived data, since other origins can scrape it via the user's browser without needing credentials. Narrow Allow-Origin to a specific origin allow-list when the response is sensitive.
Got: Allow-Origin: *
A+
Source Map Exposure
No source maps accessible (probed 10 candidate URL(s))
PASS
No source maps accessible (probed 10 candidate URL(s))
Info::
No source maps accessible across 10 probed candidate(s)
A+
HTML Version Disclosure
No software-version disclosures in HTML
PASS
No software-version disclosures in HTML
Info::
No software-version disclosures in HTML
A+
Open Redirect Surface
No redirect-shaped query parameters in DOM links
PASS
No redirect-shaped query parameters in DOM links
Info::
No redirect-shaped query parameters in DOM links
A+
Auth Security
Page is not a login form -- auth-security checks are N/A
PASS
Page is not a login form -- auth-security checks are N/A
Info::
Page does not appear to be a login form
A+
Subdomain Inventory Exposure
No risky subdomain names in certificate SANs
PASS
No risky subdomain names in certificate SANs
Info::
No risky subdomain names in certificate SANs
A+
Subresource Integrity
No external resources
PASS
No external resources
Info::
No external resources to protect
SRI Coverage No external resources — SRI not applicable
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::
security.txt is present — good practice
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✗ ExposedSecurity PolicyInfo
/package.json✓ Not founddependency-manifest—
/composer.json✓ Not founddependency-manifest—
/Gemfile✓ Not founddependency-manifest—
/Gemfile.lock✓ Not founddependency-manifest—
/requirements.txt✓ Not founddependency-manifest—
/pom.xml✓ Not founddependency-manifest—
/.gitlab-ci.yml✓ Not foundci-config—
/.travis.yml✓ Not foundci-config—
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, preload)
Info::
HSTS preload enabled
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