Skip to main content

Security Overview

Last updated: April 2026

FeatureSignals is designed as critical infrastructure for your applications. This document provides a comprehensive overview of our security architecture and controls.

Architecture Security

Hexagonal Architecture

FeatureSignals uses a hexagonal (ports & adapters) architecture that enforces strict separation of concerns:

  • Domain layer: Pure business logic with zero infrastructure dependencies
  • Handlers: HTTP adapter — validates input, delegates to domain
  • Store: Database adapter — implements persistence contracts
  • Evaluator: Stateless flag evaluation engine

This architecture prevents common vulnerability classes:

  • SQL injection is impossible in domain/handler code (no SQL there)
  • Business logic cannot be bypassed via infrastructure shortcuts
  • Each layer can be independently tested and audited

Multi-Tenancy Isolation

MechanismDescription
Middleware enforcementOrganization ID extracted from JWT, injected into context, checked on every request
Query scopingAll database queries include org_id in WHERE clause
404 for cross-org accessReturns "not found" (not "forbidden") to prevent entity existence leakage

Authentication & Authorization

Authentication Methods

MethodUse CaseImplementation
JWT (access token)Dashboard / Management API1-hour TTL, refresh token rotation (7 days)
API KeyServer SDKs / Evaluation APISHA-256 hashed, shown once at creation
SSO (SAML 2.0)Enterprise identity providerOkta, Azure AD, OneLogin, etc.
SSO (OIDC)Enterprise identity providerAny OIDC-compliant IdP
MFA (TOTP)Second factorRFC 6238 TOTP, compatible with Google Authenticator, Authy

Authorization Model

Four built-in roles with escalating privileges:

PermissionViewerDeveloperAdminOwner
Read flags, projects, segmentsYesYesYesYes
Create/edit flagsNoYesYesYes
Toggle flags (production)NoPer-envYesYes
Manage team membersNoNoYesYes
Billing, API keys, SSONoNoNoYes

Per-environment permissions allow granular control:

  • can_toggle: Allow/deny flag state changes in specific environments
  • can_edit_rules: Allow/deny targeting rule modifications in specific environments

Data Protection

Encryption

LayerStandard
In transitTLS 1.3 (minimum TLS 1.2)
At restAES-256 (database, backups)
Passwordsbcrypt (cost factor 12)
API keysSHA-256 one-way hash
Audit integritySHA-256 chain hashing

Input Validation

  • All JSON decoders use DisallowUnknownFields() to prevent mass-assignment
  • Request body limited to 1 MB
  • SQL queries use parameterized statements exclusively
  • User input never interpolated into queries

Security Headers

All responses include:

  • Content-Security-Policy
  • Strict-Transport-Security (HSTS, max-age 1 year, includeSubDomains)
  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • Referrer-Policy: strict-origin-when-cross-origin
  • Permissions-Policy (restricted camera, microphone, geolocation, payment)
  • Cross-Origin-Opener-Policy: same-origin
  • Cross-Origin-Resource-Policy: same-origin
  • Cross-Origin-Embedder-Policy: require-corp

Token Revocation

Server-side token revocation ensures that logged-out sessions are immediately invalidated:

  • Every JWT includes a unique jti (JWT ID) claim
  • On logout, the jti is added to a revocation store
  • Every authenticated request checks the revocation store
  • Expired revocation entries are cleaned up hourly by the scheduler

Network Security

Rate Limiting

Endpoint TypeLimit
Authentication (login, register)20 requests/minute
Management API100 requests/minute
Evaluation API1,000 requests/minute

IP Allowlisting (Enterprise)

Restrict management API access to specific IP ranges (CIDR notation). The evaluation API is not restricted to ensure SDK connectivity.

Audit & Monitoring

Audit Trail

Every mutating operation is recorded with:

  • Timestamp (UTC, RFC 3339)
  • Actor identity (user ID, email)
  • Action name and resource type/ID
  • Before/after state for modifications
  • Client IP address and user agent
  • SHA-256 integrity hash (chain-linked to previous entry)

Audit logs are exportable in JSON and CSV formats.

Structured Logging

  • JSON-formatted logs to stdout (12-factor compliant)
  • Request ID correlation across all log entries
  • Organization/tenant scoping on all log entries
  • No secrets, tokens, or PII in log output

Vulnerability Management

Automated Scanning

ToolTargetFrequency
govulncheckGo dependenciesEvery CI run
npm auditNode.js dependenciesEvery CI run
TrivyContainer imagesEvery build

Dependency Management

  • Explicit dependency declaration (go.mod, package.json)
  • Automated vulnerability scanning in CI pipeline
  • No transitive dependency with known critical CVEs

Incident Response

We maintain a documented incident response plan with:

  • Defined severity levels (Sev 1–4)
  • Response time SLAs per severity
  • Escalation procedures
  • Customer notification timelines
  • Post-mortem process

Full incident response plan available under NDA for Enterprise customers.

Self-Hosted Security

For organizations requiring complete data sovereignty:

  • Deploy on your own infrastructure (Docker, Kubernetes, bare metal)
  • No data ever leaves your network
  • Full control over encryption keys, backup procedures, network policies
  • Same security features as cloud-hosted version

Responsible Disclosure

Report vulnerabilities to security@featuresignals.com. We respond within 48 hours and coordinate disclosure timelines with reporters.