Terug naar blog
Technisch22 januari 20266 min

api-beveiliging: 5 Beveiligingsfouten die AI-Code Maakt i...

api-beveiliging - Ontdek de 5 meest gemaakte security fouten in AI-gegenereerde code van Cursor, Lovable en V0. Inclusief praktische code-voorbeelden en...

SG

ShadowGuard Team

Security Engineers

Bijgewerkt: 18 feb 2026

Lees meer over CSP in ons uitgebreide artikel: CSP headers uitgelegd.

2. Onbeveiligde API-endpoints

AI-tools genereren API-routes die functioneel correct zijn, maar zelden beveiligingscontroles bevatten. Dit betekent dat iedereen met de juiste URL je data kan opvragen of aanpassen.

Wat gaat er mis?

De AI maakt een route /api/users/[id] die gebruikersdata retourneert. Maar er is geen check of de aanvrager wel ingelogd is, of het de juiste gebruiker betreft. Elke bezoeker kan simpelweg de URL aanpassen om andermans gegevens op te vragen.

Praktisch voorbeeld

TypeScript
TypeScript
// Onveilig - geen authenticatie check
export async function GET(req: Request, { params }: { params: { id: string } }) {
  const user = await db.users.findUnique({ where: { id: params.id } });
  return Response.json(user);
}

// Veilig - met authenticatie en autorisatie
export async function GET(req: Request, { params }: { params: { id: string } }) {
  const session = await getServerSession(authOptions);
  if (!session) {
    return Response.json({ error: 'Niet ingelogd' }, { status: 401 });
  }
  if (session.user.id !== params.id && session.user.role !== 'admin') {
    return Response.json({ error: 'Geen toegang' }, { status: 403 });
  }
  const user = await db.users.findUnique({ where: { id: params.id } });
  return Response.json(user);
}

3. Ontbrekende HTTPS/SSL-configuratie

Veel AI-gebouwde sites draaien standaard op HTTP, of hebben hun SSL-certificaat niet correct geconfigureerd. Dit betekent dat alle communicatie tussen je bezoekers en je server onversleuteld is.

Wat gaat er mis?

Zonder HTTPS kan iedereen op hetzelfde netwerk (denk aan openbare wifi) meelezen met het verkeer. Wachtwoorden, formulierdata en persoonlijke gegevens worden als platte tekst verstuurd. Daarnaast waarschuwt Google Chrome bezoekers actief als je site geen HTTPS heeft, wat je geloofwaardigheid schaadt.

Praktisch voorbeeld

JSON
// Voeg HSTS-header toe om HTTPS af te dwingen
// next.config.js of vercel.json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Strict-Transport-Security",
          "value": "max-age=63072000; includeSubDomains; preload"
        }
      ]
    }
  ]
}

Tip: Hosting-platforms zoals Vercel en Netlify bieden gratis SSL-certificaten. Zorg dat je altijd de HTTPS-redirect activeert in je project-instellingen.

4. Geen rate limiting

Rate limiting beperkt het aantal verzoeken dat een gebruiker in een bepaalde periode kan doen. Zonder rate limiting kan een aanvaller je server overbelasten of duizenden login-pogingen doen.

Wat gaat er mis?

Een aanvaller schrijft een simpel script dat elke seconde een login-poging doet met een ander wachtwoord. Zonder rate limiting kan dit oneindig doorgaan totdat het juiste wachtwoord is gevonden. Dit heet een brute-force aanval.

Praktisch voorbeeld

TypeScript
TypeScript
// Zonder rate limiting - kwetsbaar voor brute-force
export async function POST(req: Request) {
  const { email, password } = await req.json();
  const user = await authenticate(email, password);
  return Response.json({ success: !!user });
}

// Met rate limiting via Upstash
import { Ratelimit } from '@upstash/ratelimit';
import { Redis } from '@upstash/redis';

const ratelimit = new Ratelimit({
  redis: Redis.fromEnv(),
  limiter: Ratelimit.slidingWindow(5, '60 s'), // 5 pogingen per minuut
});

export async function POST(req: Request) {
  const ip = req.headers.get('x-forwarded-for') ?? '127.0.0.1';
  const { success } = await ratelimit.limit(ip);
  if (!success) {
    return Response.json(
      { error: 'Te veel pogingen. Probeer het later opnieuw.' },
      { status: 429 }
    );
  }
  const { email, password } = await req.json();
  const user = await authenticate(email, password);
  return Response.json({ success: !!user });
}

5. Ontbrekende security headers

Naast CSP zijn er nog andere esssentiele security headers die AI-tools bijna nooit automatisch toevoegen. Elke ontbrekende header is een potentiele aanvalsvector.

De belangrijkste ontbrekende headers

  • X-Frame-Options: DENY - Voorkomt dat je site in een iframe geladen wordt (clickjacking)
  • X-Content-Type-Options: nosniff - Voorkomt dat browsers bestanden als een ander type interpreteren (MIME-sniffing)
  • Referrer-Policy: strict-origin-when-cross-origin - Beperkt welke informatie wordt meegestuurd bij het klikken op links
  • Permissions-Policy - Beperkt welke browser-API's je site mag gebruiken (camera, microfoon, locatie)

Praktisch voorbeeld

JavaScript
// Alle esssentiele security headers in next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  async headers() {
    return [
      {
        source: '/(.*)',
        headers: [
          { key: 'X-Frame-Options', value: 'DENY' },
          { key: 'X-Content-Type-Options', value: 'nosniff' },
          { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
          {
            key: 'Permissions-Policy',
            value: 'camera=(), microphone=(), geolocation=()',
          },
          {
            key: 'Strict-Transport-Security',
            value: 'max-age=63072000; includeSubDomains; preload',
          },
          {
            key: 'Content-Security-Policy',
            value: "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self';",
          },
        ],
      },
    ];
  },
};

module.exports = nextConfig;

Hoe controleer je dit automatisch?

Het handmatig controleren van al deze punten bij elke deployment is tijdrovend en foutgevoelig. Shadow Guard scant je site automatisch op al deze kwetsbaarheden en geeft je per probleem een concrete oplossing.

Draai nu een gratis scan en ontdek welke van deze 5 fouten op jouw site voorkomen. Met ons Pro-abonnement krijg je bovendien continue monitoring, zodat je bij elke deployment automatisch wordt gewaarschuwd als er een nieuwe kwetsbaarheid ontstaat.

Veelgestelde Vragen (FAQ)

Hoe vaak moet ik security scans draaien?

Minimaal maandelijks, of na elke major update. Voor productie: continue monitoring.

Is AI-gegenereerde code veiliger?

Nee, AI code bevat vaak onzichtbare kwetsbaarheden. Altijd scannen voor deployment.

Meer artikelen

Klaar om je site te beveiligen?

Start een gratis scan en ontvang direct AI-klare fix instructies.