Security Guide
Real-Time Applications

Security for Vibe-Coded Real-Time Apps

Real-time apps using WebSockets or server-sent events require authentication on the persistent connection and validation on every message. AI-generated real-time code almost never implements either.

Get security coverage specific to your use case.

Why Security Matters for Real-Time Applications

WebSocket connections bypass traditional HTTP middleware like rate limiting and authentication checks. Once a connection is open, the server trusts all messages unless explicitly validated. This creates a different security model than REST APIs. Vibe-coded real-time apps commonly have unauthenticated WebSocket endpoints, missing message validation, and broadcast channels that leak data to unauthorized subscribers.

Security Risks

Unauthenticated WebSocket connections

critical

WebSocket endpoints accepting connections without verifying user identity.

Mitigation

Authenticate during the WebSocket handshake. Pass the auth token in the connection request and validate it before accepting the connection.

Channel authorization bypass

high

Users subscribing to channels they shouldn't have access to, receiving other users' real-time updates.

Mitigation

Verify channel authorization server-side. When a user subscribes to a channel, check they have permission to receive that data.

Message injection

high

Malicious messages sent through WebSocket that are broadcast to other users without sanitization.

Mitigation

Validate and sanitize all incoming WebSocket messages. Apply the same input validation as REST endpoints.

Security Checklist

WebSocket authenticationMust Have

Verify auth tokens during the connection handshake. Reject unauthenticated connections.

Channel-level authorizationMust Have

Check user permissions before allowing subscription to specific channels or rooms.

Message validationMust Have

Validate all incoming WebSocket messages against expected schemas.

Connection rate limitingShould Have

Limit new WebSocket connections per IP to prevent resource exhaustion.

Message rate limitingShould Have

Limit messages per connection per second to prevent spam flooding.

Heartbeat and timeoutNice to Have

Implement ping/pong heartbeats and close stale connections.

Real-World Scenario

A developer builds a collaborative document editor using Supabase Realtime. The AI-generated code subscribes to document changes without checking if the user has access to the document. An attacker subscribes to the realtime channel for a private document and receives every keystroke in real-time, including confidential contract negotiations.

Frequently Asked Questions

How do I authenticate WebSocket connections?

Pass the authentication token in the WebSocket handshake request (as a query parameter or in headers). Validate the token server-side before accepting the connection. If the token expires, force a reconnection with a new token.

Does Supabase Realtime handle authorization?

Supabase Realtime respects RLS policies for database changes. But you need RLS policies properly configured — without them, any authenticated user receives all realtime events on subscribed tables.

Should I rate limit WebSocket messages?

Yes. Without rate limiting, a single connection can flood your server with messages, causing DoS for other users. Implement per-connection message rate limits and disconnect abusive clients.

Secure Your Real-Time Applications

VAS automatically scans for the security risks specific to real-time applications. Get actionable results with step-by-step fixes tailored to your stack.

Scans from $5, results in minutes.