TL;DR
The most common reason attackers hit protected endpoints without credentials? A developer forgot to add the auth middleware to one route. Other causes: wrong route ordering, HTTP method confusion, and trusting client-sent data instead of verifying server-side. Apply auth at the middleware level globally and whitelist public routes. Don't check per-route.
Common Bypass Techniques
1. Missing Middleware on Routes
// Protected routes
app.get('/api/users', authMiddleware, getUsers);
app.get('/api/users/:id', authMiddleware, getUser);
app.delete('/api/users/:id', deleteUser); // FORGOT AUTH!
// Attacker can delete any user without authentication
2. HTTP Method Confusion
// Only checking auth for POST
app.post('/api/admin', authMiddleware, adminAction);
// But what about other methods?
// GET /api/admin might return admin data unprotected
3. Path Traversal in Routes
// Auth applied to /api/admin/*
// Attacker tries: /api/admin/../users (may bypass)
// Or: /API/ADMIN (case sensitivity issues)
Prevention Strategies
- Default deny: Apply auth middleware globally and whitelist the public routes. Adding auth per-route is how you end up with one unprotected delete endpoint.
- Use router groups: Attach auth to the entire group, not individual handlers.
- Test all HTTP methods: GET might be protected but DELETE isn't. Check OPTIONS, HEAD, PUT, and DELETE explicitly.
- Normalize paths before routing: Lowercase and URL-decode before matching, so
/API/ADMINand/api/adminhit the same middleware. - List your routes programmatically: Run
express-list-endpointsor equivalent and grep for routes missing an auth handler. Do this in code review, not after a breach.
const publicPaths = ['/api/login', '/api/register', '/api/health'];
app.use('/api', (req, res, next) => {
if (publicPaths.includes(req.path)) {
return next();
}
return authMiddleware(req, res, next);
});
How do I audit my API for auth bypass?
List all routes programmatically using a tool like express-list-endpoints, then write a script that checks each route for the presence of your auth middleware. Follow that up with unauthenticated requests to every endpoint. If you get a 200 from a protected route, you found a gap.
Is HTTPS enough to secure my API?
No. HTTPS encrypts the transport layer but doesn't verify who is making the request. You still need tokens, sessions, or API keys to confirm the caller is allowed in.
Test Your API Auth
Our scanner checks all your API endpoints for authentication issues.