← AdHorde|Security Architecture
Infrastructure Security

Built for advertisers
who don't take risks.

Your ad accounts generate real revenue. We treat their security accordingly. Eleven isolation layers, zero password storage, AES-256 at rest, TLS 1.3 in transit, no third-party trackers, and publicly verified business identity.

Auth.js v5 + Upstash

Authentication, sessions & rate limiting

Meta Marketing API

Official platform OAuth v21.0

Supabase / AWS RDS

AES-256 encrypted data at rest

Vercel Edge

TLS 1.3 global CDN delivery

Stripe

PCI DSS Level 1 payments

No Third-Party Trackers

No analytics or ad pixels loaded

Next.js Edge Headers

CSP, X-Frame-Options, Permissions-Policy

Google Business

Publicly verified business listing

Trustpilot

HMAC-signed verified customer reviews

Algerian Gov. Registry

Official business registration ID

Defense in Depth

Eleven security layers, end-to-end.

Each layer independently mitigates a distinct threat surface. Compromising one doesn't compromise the next.

01
IDENTITY LAYERAuth.js v5 + Upstash

Zero-trust authentication

Every session is authenticated via Auth.js v5 (NextAuth) — enforcing HS256-signed JWTs stored exclusively in httpOnly, Secure, SameSite=Lax cookies. Credentials are validated server-side against bcrypt hashes; Google OAuth uses the official PKCE flow. Brute-force lockouts are enforced at the route layer via Upstash Redis rate limiting — 5 attempts per email per minute, 20 per IP per minute, with fail-open on Redis outage. Unverified emails are blocked from accessing the dashboard.

  • JWT session stored in httpOnly + Secure cookie — invisible to JavaScript
  • bcrypt (cost 12) password hashing — no plaintext ever stored
  • Google OAuth via official PKCE flow — we never see your Google password
  • Upstash Redis rate limiting: 5 attempts/min per email, 20/min per IP
  • Email verification required before dashboard access
02
PLATFORM OAUTHMeta Marketing API

Official Meta OAuth — zero passwords stored

When you connect your Meta ad account, we initiate Meta's official OAuth 2.0 Marketing API flow. You authenticate directly on Meta's domain — we never see your password. The resulting access token is stored server-side as an httpOnly, Secure, SameSite=Lax cookie — invisible to JavaScript, immune to XSS injection. The same token is also persisted server-side in your isolated database row as a backup. You can revoke access from Meta's Security Settings at any time.

  • Official Meta Marketing API v21.0 — zero unofficial API calls
  • Scoped permissions: ads_management, ads_read, business_management
  • httpOnly + Secure cookie — tokens are XSS-unreachable by design
  • Dual persistence: cookie + server-side DB — no single point of failure
  • Instant revocation from Meta Security Settings
03
DATA AT RESTAWS eu-west-1

AES-256 encryption on AWS RDS

All user data is stored in Supabase PostgreSQL running on AWS infrastructure in eu-west-1 (Ireland). AWS RDS enforces AES-256-XTS encryption on every storage volume by default — keys managed via AWS KMS with automatic annual rotation. Our service role key, the only credential that can bypass row-level policies, lives exclusively in server-side environment variables — it has never touched a client bundle or browser context.

  • AES-256-XTS block-level encryption on all RDS volumes
  • AWS KMS key management — hardware-backed HSM key storage
  • eu-west-1 (Ireland) data residency — within the EU
  • Row-level user_id scoping on every query — logical tenant isolation
  • Service role key is server-only — never shipped to any client
  • All database functions hardened with SET search_path = public — schema injection attacks blocked
04
TRANSPORT SECURITYVercel Edge

TLS 1.3 end-to-end. Every request.

All traffic between your browser and AdHorde traverses Vercel's global edge network over TLS 1.3 — the latest protocol, with removed legacy cipher suites and perfect forward secrecy via ECDHE key exchange. HTTP Strict Transport Security headers with a 1-year max-age ensure your browser never falls back to plaintext. Every plaintext HTTP request is permanently redirected to HTTPS at the edge.

  • TLS 1.3 enforced — TLS 1.0/1.1 blocked at the edge
  • ECDHE key exchange — each session key is ephemeral
  • Perfect Forward Secrecy — past sessions can't be decrypted if keys leak
  • HSTS with 1-year max-age — browser enforces HTTPS preload
  • Certificate management via Vercel's managed cert infrastructure
05
HTTP SECURITY HEADERSNext.js Edge Headers

Seven hardened headers on every response.

Every HTTP response from AdHorde — pages, API routes, and static assets — is served with a full suite of hardened security headers enforced at the Next.js edge layer. Content Security Policy restricts exactly which origins can load scripts, styles, images, and frames — blocking any unauthorized injection at the browser level. Clickjacking is blocked via X-Frame-Options: DENY and CSP frame-ancestors: none. MIME-type sniffing attacks are blocked via nosniff. Camera, microphone, geolocation, and payment hardware APIs are all explicitly disabled via Permissions-Policy. API routes additionally carry Cache-Control: no-store to prevent any sensitive response from being stored in CDN or browser caches.

  • Content-Security-Policy: strict allowlist — script-src, img-src, connect-src, frame-src all locked
  • X-Frame-Options: DENY — clickjacking blocked at the browser level
  • X-Content-Type-Options: nosniff — MIME confusion attacks blocked
  • Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()
  • Referrer-Policy: strict-origin-when-cross-origin — no URL leakage across origins
  • X-XSS-Protection: 1; mode=block — legacy XSS filter enforced
  • API routes: Cache-Control: no-store — sensitive responses never cached at edge or browser
06
ABUSE PREVENTIONUpstash Redis

Rate limiting on every endpoint

Every API endpoint enforces per-IP rate limiting at the application layer via Upstash Redis. The AI chat endpoint limits to 20 requests per minute per IP. Campaign creation, credit operations, and automation writes all have independent limits. Requests that exceed limits receive a 429 with a Retry-After header — they're never queued for delayed execution.

  • Per-IP rate limiting on every API endpoint independently
  • AI chat: 20 req/min — campaign create, credits, automation: separate limits
  • Upstash Redis-backed rate limiting — survives serverless cold starts
  • 429 hard-stop with Retry-After — no silent queuing or degraded execution
  • Auth endpoint lockouts: 5 attempts/min per email, 20/min per IP
07
PAYMENT SECURITYStripe PCI DSS L1

PCI DSS Level 1 via Stripe — card data never touches us

All payment processing is delegated to Stripe — a PCI DSS Level 1 Service Provider, the highest certification tier possible. Your card number, CVV, and expiry date are captured directly by Stripe's JavaScript SDK on Stripe's domain and are tokenized before any data reaches our servers. What we receive is a Stripe token reference, never raw card data. Webhook events are validated via HMAC-SHA256 signature verification on every delivery — spoofed events are cryptographically impossible to forge.

  • Stripe PCI DSS Level 1 — independently audited annual compliance
  • Card data tokenized at source — our servers never process raw PANs
  • Stripe.js handles card capture directly in Stripe's iframe context
  • Webhook HMAC-SHA256 signature validation — every event verified
  • Stripe customer IDs are the only payment reference stored in our DB
08
PRIVACY BY DEFAULTNo Trackers

No third-party trackers. Privacy by default.

AdHorde does not load any third-party advertising or analytics trackers — there is no Google Analytics, no behavioral pixel, and no session-recording SDK anywhere on the site. The only third parties involved are the operational providers required to run the Service (Stripe for payments, Supabase/AWS for the database, Vercel for hosting). Because we don't run tracking scripts, our Content Security Policy can lock connect-src and script-src down to a strict allowlist, blocking unauthorized third-party requests at the browser level.

  • No third-party advertising or analytics trackers loaded — none wired in the codebase
  • Only operational providers (Stripe, Supabase/AWS, Vercel) process data — strictly to deliver the Service
  • Strict Content-Security-Policy allowlist on connect-src and script-src blocks unauthorized origins
  • We exercise GDPR and CCPA rights requests directly — contact [email protected]
  • We do not sell personal data and do not run behavioral tracking
09
AUDIT & OBSERVABILITYPostgreSQL

Every action logged. Immutably.

Admin operations generate immutable audit log entries in PostgreSQL: action type, timestamp (UTC), admin user ID, target user ID, email, and a full JSON diff of what changed. Automation rule events — rule created, edited, fired, paused, deleted — are logged with millisecond-precision timestamps. Both logs are write-append-only from the application layer — there is no delete endpoint exposed to admin users.

  • Admin audit log: action, timestamp, admin ID, target ID, full change diff
  • Automation event log: every rule create, fire, pause, delete — per user
  • Write-only append pattern — no delete exposed at the application layer
  • Log export available: CSV download from the Automation Logs page
10
BUSINESS VERIFICATIONGov. Registered

Officially registered, publicly verifiable.

AdHorde is an officially registered digital services business under Algerian law (Domain 020000 — Digital services and related activities, Activity Code 021626). The business is publicly listed on Google Business Profile and searchable by name. Domain registration is verified through Squarespace Domains with accurate ICANN contact information. Business details are published on ScamAdviser with the official government registration ID.

  • Algerian government business registration — ID 100306110033226558
  • Activity: Domain 020000 — Digital services (Code 021626)
  • Google Business Profile — searchable on Google Search and Maps
  • ICANN-verified domain registration via Squarespace Domains
  • ScamAdviser business profile with verified contact and registration details
  • Business contact: [email protected] · +213 553 16 41 87 · Drean, EL TARF, Algeria
11
THIRD-PARTY TRUSTTrustpilot Verified

Verified reviews via Trustpilot.

AdHorde is registered on Trustpilot and implements their In-App Verified Review Collector — a cryptographically signed review system where every review invitation is tied to a real authenticated user session via HMAC-SHA256 signature. Fake or incentivized reviews are structurally impossible. Every paying customer automatically receives a Trustpilot review invitation after subscription, ensuring review authenticity at the platform level.

  • Trustpilot business profile — publicly listed at trustpilot.com/review/adhorde.com
  • In-App Verified Review Collector — HMAC-SHA256 signed user payload per invitation
  • Review invitations sent automatically after confirmed subscription via Stripe webhook
  • Trustpilot badge displayed on adhorde.com — publicly visible trust signal
  • Business unit ID: 6a1f3160bf4d2e353724e62f — verifiable on Trustpilot's platform

Data Handling

What we store. What we don't. Why.

We Store

  • Your email + nameRequired for account creation and Auth.js session
  • Stripe customer IDPayment reference only — no card data
  • Meta access tokenhttpOnly cookie + server-side DB, never in client JS
  • Campaign metadataRead from Meta API, displayed in your dashboard only
  • Subscription statePlan, credits, billing cycle — for feature gating
  • Admin audit eventsWho changed what and when — compliance only

We Never Store

  • Your Meta passwordOAuth only — not even technically possible
  • Raw card numbers (PANs)Stripe tokenizes before we see anything
  • Audience or customer listsWe never read targeting or audience data
  • Ad creative filesWe reference Meta CDN URLs, never host assets
  • Targeting demographicsWe don't access or store who you target
  • User behavior dataNo session recording, no keystroke logging

Infrastructure

Every vendor, enterprise-grade.

We don't build security from scratch — we compose it from best-in-class providers, each with independent third-party audits.

Auth.js v5 + Upstash Redis

Authentication & Rate Limiting

Self-hosted
  • httpOnly + Secure JWT session cookie — no client JS access
  • bcrypt cost-12 password hashing
  • Google OAuth PKCE flow — zero password exposure
  • Upstash Redis: 5 req/min per email, 20/min per IP on sign-in

AWS RDS (via Supabase)

Database

AWS Certified
  • AES-256-XTS encryption at rest
  • AWS KMS HSM-backed key management
  • eu-west-1 (Ireland) — EU data residency
  • Automated daily backups with point-in-time recovery

Stripe

Payments

PCI DSS Level 1
  • PCI DSS Level 1 Service Provider
  • Annual QSA audit by independent assessor
  • Card data never leaves Stripe's iframe context
  • HMAC-SHA256 webhook signature validation

Next.js Edge Headers

Browser Hardening

CSP + HSTS
  • Strict Content-Security-Policy allowlist on script-src and connect-src
  • HSTS with 1-year max-age — HTTPS enforced
  • X-Frame-Options: DENY + Permissions-Policy lockdown
  • No third-party analytics or advertising trackers loaded
Responsible Disclosure

Found a vulnerability?

We take security reports seriously. If you've identified a vulnerability in our platform, please disclose it responsibly. We'll acknowledge your report within 24 hours and keep you updated throughout the resolution process.

Report a Vulnerability →

[email protected] · We respond within 24 hours