Security model
⬡Authentication
- →JWT tokens with secure signing and limited expiry
- →Passwords hashed with strong key-derivation function
- →API keys stored as hashes only — raw key shown once at creation
- →Brute-force lockout with escalating thresholds per-email and per-IP
- →Requires email verification before account activation
- →Unverified accounts are automatically purged after a grace period
- →2FA (TOTP) setup blocked until email is verified
◈Transport & Headers
- →TLS 1.3 enforced on all connections — HTTP redirects to HTTPS
- →Strict HSTS with long max-age, includeSubDomains, preload
- →X-Frame-Options: DENY — no clickjacking
- →X-Content-Type-Options: nosniff
- →Referrer-Policy: strict-origin-when-cross-origin
- →Content-Security-Policy on every response
- →Server and X-Powered-By headers stripped
◎Rate Limiting & Abuse
- →Per-IP sliding-window rate limits on every endpoint
- →Stricter limits on authentication endpoints
- →Request body size capped to prevent abuse
- →Path traversal guard on all requests — double-dots and double-slashes blocked
- →IP blocklist — persistent offenders banned at middleware level
⬟Data & Infrastructure
- →PostgreSQL with parameterised queries — no raw SQL interpolation
- →Full-text search via indexed database — no external search engine exposure
- →Pro endpoints gated by plan — API key scope validated on every request
- →Article deduplication by content hash
- →CORS restricted to explicit allow-list — no wildcard origins
- →Payments handled entirely by PayPal — no payment card or financial data stored on our servers
Responsible Disclosure
Found a vulnerability? We take security reports seriously. Please disclose responsibly — give us time to fix the issue before publishing details publicly.
Contactsupport@pulseaggregator.com
Response SLAWe aim to acknowledge reports within 48 hours.
Scopeapi.pulseaggregator.com and www.pulseaggregator.com
Out of scopeThird-party services, social engineering, physical attacks.
Our commitments
- We never sell your dataYour email, usage, and article history stay on our servers.
- We never store raw passwordsOnly strong password hashes are persisted.
- We never log API keysOnly hashes are stored — the raw key is shown once.
- We never expose internal errorsStack traces and DB errors are never returned to clients.
- We never cache sensitive responsesAuth and user endpoints set Cache-Control: no-store.
- We never store payment dataPayments are processed entirely by PayPal — no payment card details or financial information are held on our servers.
- We enforce email verificationAccounts are inactive until the email is verified. Unverified accounts are automatically removed after a grace period.