Security & Compliance · controls inventory

Built fail-closed, isolated, and auditable. Designed against OWASP ASVS, ISO 27001 Annex A, and SOC 2 trust criteria as a checklist lens.

This page is a controls inventory written for CISO, security architect, compliance, and audit reviewers. Each section lists specific primitives currently in place. The standards alignment section explicitly separates implemented controls from in-progress ones. This is not a certification claim.

§ 0

Posture at a glance

  • Fail-closed by default at every boundary.
  • Defense in depth, no single control assumed sufficient.
  • No money-moving or identity-bearing primitive trusts the client.
  • Authenticated cryptography throughout, no unauthenticated modes.
§ 1

Authentication & identity

OWASP A07 · ASVS V2 · ISO A.9 / A.5.15-18 · SOC 2 CC6.1

Passwords: scrypt with embedded cost parameters N=16384, r=8, p=1, constant-time verification. TOTP per RFC 6238 with backup codes per RFC 4226. M2M API keys are SHA-256-hashed at rest. Invite tokens are 192-bit CSPRNG, SHA-256-stored. Lockout enforced per identity and per source IP.

§ 2

Session management & CSRF

ASVS V3

Opaque sess_… tokens, hashed at rest. Session cookies HttpOnly + SameSite=Strict. CSRF via double-submit token with constant-time comparison. Live re-validation on every request, no stale acceptance window.

§ 3

Authorisation & multi-tenant isolation

OWASP A01/A04 · ASVS V4

Scope is derived from the principal, not the request. enforceScope validates query and body in a single pass. RBAC is a fail-closed allow-list. Postgres RLS is ENABLE + FORCE on 13 named tables. Audit events live in journal_events, append-only via a BEFORE trigger. Unknown IBANs are quarantined.

§ 4

Encryption at rest

OWASP A02 · ASVS V6

Field-level AES-256-GCM. Ciphertext format enc:v2:<keyId>:… enables key rotation by embedded keyId. Keys are domain-separated per data class.

§ 5

Encryption in transit

Database TLS with certificate verification enforced. Outbound traffic HTTPS-only, redirects are not followed. Strict-Transport-Security in production.

§ 6

API & application security

Parameterised SQL throughout. Zod schemas at the boundary. Money represented as BigInt minor units. Request body capped at 1 MB. Per-caller rate limiting. Idempotency keys required on write paths. Slowloris timeouts on connections. Generic error responses, no internal detail leakage. Cache-Control: no-store on sensitive responses.

§ 7

HTTP hardening & headers

Explicit CSP. X-Frame-Options: DENY. Metrics labels kept low-cardinality to prevent label-explosion DoS.

§ 8

File handling

Path-traversal guard on every filename. XXE fully closed: DOCTYPE is refused, not just resolved-as-empty. Gzip expansion capped at 64 MB. Idempotency is content-addressed.

§ 9

Network security & SSRF

Structural SSRF guard rejects private-range, loopback, and decoded obfuscated IP literals. DNS resolution is checked, and IP pinning defeats DNS-rebinding TOCTOU between check and connect. SFTP host keys are pinned. Webhook destination URLs are re-checked at delivery time.

§ 10

Cryptographic channel security (bank connectivity)

PGP sign + encrypt fail-closed. XML-DSig with RSA-SHA256 and mandatory certificate pinning. EBICS H005 uses RSA-OAEP with HPB fingerprint verification. Bank Connect messages are signature-verified.

Honest note: several banks still mandate RSA PKCS#1 v1.5 and AES-CBC at the channel boundary. Where those are required we use them, surrounded by extra integrity and pinning hardening, but we do not pretend the underlying primitives are our choice.

§ 11

Payment authorisation controls

Maker-checker is fail-closed: an initiator cannot self-approve. Locked policies require a second admin to modify. Terminal states are protected, sent and acknowledged payments cannot regress. MsgId is scoped per bank key to prevent collision across tenants.

§ 12

Audit, integrity & non-repudiation

All state changes journaled. The journal is hash-chained with HMAC-SHA256 using a server-held audit key. GET /journal/audit/verify re-walks the chain and reports the first inconsistent entry. We document what this guarantees (tamper-evidence within the database trust boundary) and what it does not (it is not an external timestamping service).

§ 13

Secrets management

KeyProvider validates required keys at boot. Refuses to start in production with a development key. Refuses to start if the audit HMAC key fails an entropy check.

§ 14

Standards alignment

Used as a checklist lens. Not a certification claim. SOC 2 / ISO 27001 readiness in progress. External penetration testing is built in as an integral, ongoing part of delivery over time. KMS/HSM as default key custody planned. Live production bank round-trips pending real bank agreements.

Roadmap

  • External penetration testing as an integral, ongoing part of delivery.
  • SOC 2 / ISO 27001 certification.
  • KMS / HSM as default key custody.
  • Live production bank round-trips with named partners.

Request the full security dossier

The full dossier expands every section above with code references, test artefacts, and the standards mapping table. It is shared on request under NDA.

Email hello@bankconnector.com →