The OWASP Top 10 is the industry standard list of web application security risks, but its documentation is written for enterprise security teams, not indie developers shipping with Next.js and Supabase. Most of the ten categories still apply to modern SaaS stacks, but five of them account for the vast majority of real vulnerabilities we find in vibe-coded apps: Broken Access Control, Injection, Security Misconfiguration, Identification and Authentication Failures, and Server-Side Request Forgery. Understanding these five in the context of your actual stack is far more valuable than reading the full 50-page OWASP PDF.
Broken Access Control (A01) is by far the most common issue. It means a user can access or modify data that belongs to someone else. In a typical Next.js plus Supabase app, this happens when API routes fetch data without filtering by the authenticated user ID, or when Supabase tables lack Row Level Security policies. The fix is straightforward: every database query that touches user data must include a WHERE clause scoped to the current user, and RLS policies should enforce the same constraint at the database level. Injection (A03) still matters even though modern frameworks parameterize most queries by default. The risk shows up in dynamic Supabase filters, raw SQL calls using template literals, and anywhere user input flows into a query string without sanitization.
Security Misconfiguration (A05) covers a wide range of issues: default credentials left in place, overly verbose error messages that reveal internal paths, debug mode enabled in production, and permissive CORS headers. In the vibe-coding world, the most frequent misconfiguration is shipping environment variables that belong in the server to the client bundle. Next.js makes this easy to do accidentally: any variable prefixed with NEXT_PUBLIC_ is included in the browser bundle, and developers routinely put sensitive keys there because it is the fastest way to get something working. Identification and Authentication Failures (A07) often manifest as session tokens stored in localStorage (vulnerable to XSS) instead of HttpOnly cookies, or login endpoints without rate limiting that allow credential stuffing.
Server-Side Request Forgery (A10) is increasingly relevant because modern SaaS apps frequently call external APIs, and users can sometimes influence the target URL. If your app has any feature that fetches a URL provided by the user (link previews, webhook testing, import from URL), validate that the URL points to a public host and does not resolve to internal infrastructure like 169.254.169.254 (the cloud metadata endpoint). The practical takeaway is this: you do not need to become a security expert to build a secure SaaS. You need to understand these five categories, check your app against them, and re-check every time you ship a significant feature. Automated scanning tools exist specifically to make this process fast and repeatable so it does not slow down your shipping cadence.
Want to check your app for these issues?
Guardian scans your live app and finds these exact problems in under 5 minutes. No install, no CLI, no configuration.
Scan my app free