Sécurité de baseSévérité moyenne

CORS trop permissif

Le header Access-Control-Allow-Origin dit au navigateur quels domaines ont le droit de lire la réponse d'une requête faite depuis leur propre page. Avec la valeur *, la réponse est lisible par n'importe quel site web, pas seulement le tien.

Quand c'est vraiment un problème

Une page HTML statique servie avec Access-Control-Allow-Origin: * n'est pas un souci — elle est publiquement navigable de toute façon. Le vrai risque, c'est une réponse API (JSON) qui contient des données utilisateur : si le visiteur est connecté (cookie de session envoyé automatiquement) et qu'un site malveillant fait une requête vers ton API depuis sa propre page, un CORS permissif lui permet de lire la réponse.

Le correctif

Remplace * par la liste explicite des domaines qui ont légitimement besoin d'appeler ton API :

Access-Control-Allow-Origin: https://tondomaine.com

Sur Next.js (API routes) :

export async function GET(req: Request) {
  const origin = req.headers.get('origin');
  const allowed = ['https://tondomaine.com'];

  return Response.json(data, {
    headers: {
      'Access-Control-Allow-Origin': allowed.includes(origin ?? '') ? origin! : '',
    },
  });
}

Si ton API n'a pas besoin d'être appelée depuis un autre domaine du tout, le plus simple est de ne pas envoyer ce header — par défaut, le navigateur applique déjà la politique la plus restrictive (same-origin only).

Vérifie si ton site est concerné par cette faille.

Scanner mon app