
Keep AI Agents Away From Production Deletes
Block standing production delete authority with separate identities, permission ceilings, exact approvals, short-lived access, and audit records.
Identity & data boundaries
Authentication, authorization, row-level security, and sessions — keeping the wrong people away from the right data.
44published articles

Block standing production delete authority with separate identities, permission ceilings, exact approvals, short-lived access, and audit records.

Run an evidence-based pre-launch review across authorization, secrets, inputs, dependencies, deployment, agents, monitoring, recovery, and retests.

Use AI-generated tests as regression checks, then add independent invariants, negative cases, mutation checks, and scoped retest evidence.

Secure Stripe billing with server-owned entitlements, raw-body webhook verification, idempotent processing, constrained keys, and failure-path tests.

Identify secrets shipped in browser bundles, move privileged calls behind a server boundary, and rotate exposed credentials safely.

Separate Base44 app visibility from data permissions, review table access and backend secrets, then verify the deployed app with distinct accounts.

Identify the Bolt backend, protect server functions and webhooks, test database policy, and verify the published deployment.

Make authentication responses uniform, throttle online guessing by account and network signals, and test recovery flows safely.

Keep untrusted pull requests outside privileged CI jobs with narrow tokens, protected deployments, bound OIDC claims, and verified artifacts.

Understand why route guards and hidden controls cannot enforce access, then place authorization at the server operation that needs it.

Treat Worker bindings as capabilities, keep secrets encrypted, constrain outbound fetch and caching, and verify routes with production-shaped Wrangler config.

Separate Pydantic request validation from object authorization, then configure CORS, hosts, proxy trust, TLS, errors, and API documentation.

Design Firebase security as separate identity, authorization, app-attestation, and abuse-resistance layers, then test Firestore and Storage rules locally.

Run a lightweight threat-model review for an AI-built app by mapping real data flows, assigning owners, and turning decisions into testable release checks.

Use a safe two-account test to find object authorization flaws, then fix the resource lookup instead of hiding identifiers.

Validate JWT signatures, algorithms, issuers, audiences, time claims, and token types with a deployment-specific trust policy.

Narrow MCP tools by verb, resource, schema, token audience, and approval so model-controlled calls cannot inherit broad authority.

Review a Lovable app across its public frontend, Edge Functions, database RLS, authentication, scans, and publish settings.

Stop request bodies from changing roles, owners, prices, and workflow state with operation-specific schemas and explicit data writes.

Contain multi-agent prompt injection with preserved provenance, structured handoffs, separated capabilities, intent checks, and safe canary tests.

Carry a server-owned tenant context through APIs, jobs, caches, storage, and database queries, then verify it with two tenants.

Treat every callable Next.js server entry as an API, centralize authorization in a server-only data layer, and minimize data sent to the browser.

Build an ordered Express request contract, authorize resources at every route, and verify proxy, session, limit, error, and dependency settings.

Secure OAuth redirects with exact registration, transaction-bound callback state, PKCE, issuer checks, and a strict code exchange.

Store passwords with maintained memory-hard hashing, deployment-tested work factors, safe migration, and rehashing on login.

Design reset and verification flows with uniform responses, single-use tokens, trusted links, and explicit session decisions.

Authorize paid features from server-owned entitlement state, reconcile provider updates, and handle stale access without trusting client claims.

Find exposed previews, app origins, database APIs, and storage before launch, then prove each access boundary with logged-out and second-account tests.

Use React's rendering protections correctly while keeping authorization, secrets, sensitive data, and side effects behind verified server boundaries.

Separate Replit Preview from production, choose the right deployment, protect secrets and APIs, and inspect live response headers.

Inventory privileged actions, enforce one server-side policy across every method, and test admin routes with ordinary accounts.

Protect AI-built internal tools with managed identity, per-action authorization, narrow service accounts, audit logs, recovery, and a shutdown owner.

Secure an MCP server with deliberate transport choices, audience-bound tokens, per-tool authorization, session isolation, and execution-time approval.

Protect public AI APIs with object authorization, bounded work, cost controls, constrained tools, safe output handling, and tested failure paths.

Configure host-scoped session cookies, choose SameSite deliberately, rotate identifiers, and test server-side expiry and revocation.

Design scoped audit events that reconstruct sensitive actions, resist silent changes, protect private data, and survive collection failures.

Turn scoped security evidence into an accountable go, conditional, no-go, or not-evaluated decision with owners and rollback readiness.

Create one deny-by-default authorization seam for API actions, resources, and tenants, then test every sensitive path.

Build and test Supabase row-level security with precise grants, command policies, and two-account checks before release.

Secure the Supabase access chain from API grants and row-level security through user JWTs, server-only privileged keys, views, and functions.

Build a lightweight startup threat model from assets, trust boundaries, misuse cases, mitigations, owners, tests, and review triggers.

Use two owned accounts and synthetic records to test object-level authorization across reads, writes, deletes, exports, files, and nested resources.

Treat every Vercel preview as a live environment, then control deployment access, variables, data, bypass secrets, callbacks, and retirement.

A six-layer guide to testing AI-built apps, preserving evidence, retesting fixes, and making an honest release decision.