Good
1.Supabase Anon/Publishable Key detected in page HTML
2.CORS wildcard (*) on non-credentialed endpoint
Security Vulnerabilities
7 issuesUnauthenticated request to "profiles" returned HTTP 200 with zero rows
Impact:This could mean RLS is correctly filtering all rows for anonymous requests (a good outcome that looks identical over the wire to a genuinely empty table), or it could mean the table is simply empty right now and would return real data once populated. This scan cannot distinguish the two cases from the response alone.
Unauthenticated request to "users" returned HTTP 200 with zero rows
Impact:This could mean RLS is correctly filtering all rows for anonymous requests (a good outcome that looks identical over the wire to a genuinely empty table), or it could mean the table is simply empty right now and would return real data once populated. This scan cannot distinguish the two cases from the response alone.
Unauthenticated request to "user_profiles" returned HTTP 200 with zero rows
Impact:This could mean RLS is correctly filtering all rows for anonymous requests (a good outcome that looks identical over the wire to a genuinely empty table), or it could mean the table is simply empty right now and would return real data once populated. This scan cannot distinguish the two cases from the response alone.
Unauthenticated request to "orders" returned HTTP 200 with zero rows
Impact:This could mean RLS is correctly filtering all rows for anonymous requests (a good outcome that looks identical over the wire to a genuinely empty table), or it could mean the table is simply empty right now and would return real data once populated. This scan cannot distinguish the two cases from the response alone.
Unauthenticated request to "payments" returned HTTP 200 with zero rows
Impact:This could mean RLS is correctly filtering all rows for anonymous requests (a good outcome that looks identical over the wire to a genuinely empty table), or it could mean the table is simply empty right now and would return real data once populated. This scan cannot distinguish the two cases from the response alone.
Supabase Anon/Publishable Key detected in page HTML
Impact:A Supabase Anon/Publishable Key is visible in the HTML source. This is expected — this key is designed to be public and is safe to ship client-side by itself. It becomes a real risk only if the server-side authorization behind it (RLS policies, webhook signature checks, security rules) is missing or misconfigured — see the relevant findings below for that check.
Evidence:eyJhbGci***GJD0
CORS wildcard (*) on non-credentialed endpoint
Impact:This endpoint allows cross-origin requests from any website, but does not accept credentials (cookies/auth headers), so this is the expected configuration for a public API. Only a concern if this endpoint later starts returning user-specific or authenticated data without also restricting the origin.
Evidence:OPTIONS https://www.bullwiser.com/ → Access-Control-Allow-Origin: *
Long-lived JWT detected — but it's a Supabase anon/publishable key, expected by design
Impact:This token decodes to role: "anon" with a multi-year lifetime, matching Supabase's publishable API key exactly — it's meant to be public and long-lived, and grants no access on its own. Every table it can reach is gated by that table's own Row Level Security policy, not by this key's expiry. A long lifetime here is not a vulnerability. If RLS is missing or misconfigured on a table, that shows up as its own separate finding.
JWT signature forgery and secret-strength testing were not performed
Impact:This scan decoded JWT header/payload structure only — it never attempted to verify, forge, or brute-force the token's signature (e.g. testing for a weak/guessable HS256 secret), since that would require sending forged tokens to live authenticated endpoints. A finding-free result above means no structural weaknesses were found, not that the signing key is confirmed strong.
No ID-bearing API endpoints discovered for authorization testing
Impact:No endpoints matching a REST-style object ID pattern (e.g. /api/orders/123) were found in the page HTML or loaded JavaScript bundles. This does not mean none exist — endpoints only called after user interaction, or referenced in code not loaded on the homepage, would not be visible to this scan.
RLS appears to block unauthenticated reads on "reviews"
Impact:An unauthenticated request to this table was rejected (HTTP 401), consistent with Row Level Security correctly denying anonymous access.
Write-operation RLS testing (INSERT/UPDATE/DELETE) was not performed
Impact:This scan only tested unauthenticated SELECT (read) access. Testing unauthenticated INSERT, UPDATE, and DELETE was not performed because doing so safely requires a self-cleaning canary-row strategy that has not been implemented yet — attempting it without one risks writing real data into your database, which this scanner will not do.
No URL-fetching endpoints discovered for SSRF testing
Impact:No endpoint paths matching common proxy/fetch/preview/screenshot/webhook naming patterns were found in the page HTML or loaded JavaScript bundles. This does not rule out SSRF — endpoints only reachable after login, or referenced in code not loaded on the homepage, are not visible to this scan.
Webhook replay protection and idempotency were not tested
Impact:This scan only checked whether an invalid signature is rejected. It did not test replay attacks (resubmitting a previously valid, captured signed event) or idempotency handling (the same valid event processed twice) — both require a real, previously-captured valid signature this scanner doesn't have.
Fixed: Missing Cross-Origin-Opener-Policy header
Impact:Without COOP, other windows/tabs opened by your page (or that open your page) can retain a JavaScript reference to it, enabling cross-window side-channel attacks such as Spectre-style data leaks.
Fixed: Missing Cross-Origin-Resource-Policy header
Impact:Without CORP, other sites can embed your images/scripts/assets directly, which can enable data-leak techniques against browsers that support speculative side-channel attacks.
14 findings are locked. Unlock the full report to see every vulnerability, its business impact, and a copy-paste fix.
Unlock Full Report — $24.99One-time payment · Instant access · 7-day refund guarantee
What We Tested — Security
8 of 8 cleanAPI Key Exposure
No API keys or secrets found in JS bundles or HTML source
CORS Configuration
Cross-origin requests are properly restricted
Security Headers
HSTS, CSP, X-Frame-Options and other headers are set
Admin Route Exposure
No sensitive admin or debug endpoints are publicly accessible
Config File Exposure
No .env or config files are publicly readable
GraphQL Security
GraphQL introspection is disabled or not present
Cookie Security
Session cookies have HttpOnly, Secure and SameSite attributes
Injection & Active Attacks
No XSS, SQL injection, open redirect or rate-limit bypass found
Issues with your domain, email, TLS, and dependency configuration
0 issuesDKIM record found (selector: google)
Impact:A DKIM selector was found at this domain, indicating outbound mail is likely being signed. Full validation of signature correctness requires an actual signed message and is outside passive DNS scanning.
DNSSEC does not appear to be enabled
Impact:No DS record was found for this domain. Without DNSSEC, DNS responses for this domain are not cryptographically signed, making cache-poisoning/spoofing attacks against DNS resolvers (not the app itself) theoretically easier. This is a low-severity, defense-in-depth control for most SaaS applications.
Subdomain discovery was limited to common names and page-referenced hosts
Impact:This scan checked 17 candidate subdomain(s) — a common-name wordlist plus any hostnames found in the page and its scripts. It did not perform a full DNS zone transfer or certificate-transparency-log search, so subdomains not in that set and not linked anywhere on the site itself would not be found.
Infrastructure checks already passing
7 of 8 cleanSPF Record
SPF record exists and is configured
DMARC Policy
DMARC record exists with an enforcing policy
DKIM Configuration
DKIM selector found and configured
TLS / Certificate Configuration
TLS certificate and configuration look healthy
Subdomain Takeover
No dangling DNS records pointing at unclaimed services
Known CVE Vulnerabilities
No known CVEs found for your detected tech stack
Historical File Exposure
No sensitive files found archived in the Wayback Machine
AI CODE WARNING — client-side database mutation calls detected
Impact:The client bundle calls .insert()/.update()/.delete() directly against a database table from browser JavaScript (a common Supabase/Firebase pattern AI tools generate). This is a completely normal, safe pattern *if and only if* Row Level Security (or equivalent rules) correctly restrict who can do what to which rows. It is a real vulnerability if RLS is missing, disabled, or misconfigured for the affected table.
Evidence:Client-side .insert()/.update()/.delete() call pattern found in publicly downloadable JS
Fix — copy & paste
This finding is a pointer, not a verdict — see the Supabase RLS / Firebase Security findings elsewhere in this report for the actual test of whether these calls are safely restricted. If RLS passed for the relevant tables, no action needed here.Business logic testing requires an authenticated test transaction — not run
Impact:Business-logic flaws (client-controlled pricing, negative quantities, missing ownership checks, replayable discount codes) can only be confirmed by attempting a real, authenticated transaction and observing what the server actually accepts. This scan is passive/read-only against the public site, so this category is not fully testable from here. The checks below are limited, low-confidence signals worth a manual look — not a substitute for actually testing your checkout/order flow.
Issues affecting how Google, ChatGPT, and Perplexity find and rank your site
1 issueFavicon is missing
Impact:Sites without favicons look unfinished in browser tabs and bookmarks. Google also displays favicons next to search results — a missing one makes your listing look less credible than competitors.
Evidence:No <link rel="icon"> or similar favicon tag found in HTML
Fix — copy & paste
Add to your <head>:
<link rel="icon" href="/favicon.ico">
Or PNG: <link rel="icon" href="/icon.png" type="image/png" sizes="32x32">Visibility checks already passing
10 cleanPage Title (SEO)
Title tag is present and well-optimized (50–60 characters)
Meta Description
Meta description is present and the right length (120–160 characters)
Social Share (Open Graph)
Open Graph tags are set — links share with a rich preview card
H1 Heading Structure
Page has exactly one H1 tag with a clear value proposition
Image Alt Text
All images have descriptive alt text for search and accessibility
Structured Data (JSON-LD)
Structured data tells Google and AI engines what your product does
FAQ Schema (AEO)
FAQ schema is set — enables rich results and AI answer citations
Organization Schema (GEO)
Organization schema tells AI engines your business entity details
Trust Pages (About, Contact, Privacy)
About, Contact, and Privacy pages are accessible — Google and AI engines verify these
Technical SEO (robots, sitemap, canonical)
robots.txt, sitemap.xml, and canonical tags are correctly set
Scan ID: df45b895-d3b5-45d5-9246-d22f8a3f77e0 · StackSecured scans are for authorized security research only