Retour au blog Monitoring - 7 min

Erreur 403 Forbidden : pourquoi elle apparaît et comment la lever

Un 403 Forbidden est un refus explicite : fichier, règle WAF, rôle ou nonce. Isolez la règle, corrigez-la, et n’ouvrez pas les droits du serveur.

Le code 403 Forbidden signifie que le serveur a compris la requête et refuse de la servir. Ce n’est pas une ressource introuvable, ni un identifiant manquant. Si le serveur voulait que le client s’authentifie, il devrait répondre 401. Ici, répéter la même requête avec le même compte ne change rien : la règle qui refuse est ailleurs.

D’où vient un 403 sur un site réel

Les causes habituelles ne se recouvrent pas avec celles d’un 401.

  • Les droits du système de fichiers. Le processus du serveur web ne peut pas lire le fichier ou traverser un dossier. Le journal parle alors de permission, pas d’un utilisateur applicatif.
  • Une règle du serveur. .htaccess ou la configuration Nginx contient Require all denied, un deny, ou une liste d’IP. Le dossier wp-admin ou un répertoire d’upload est souvent visé après un durcissement.
  • Un pare-feu applicatif. ModSecurity ou un WAF hébergé classe une requête normale en attaque. Les recherches avec une apostrophe, les URL longues de filtres e-commerce et certains corps JSON déclenchent de faux positifs. L’identifiant de règle est dans le journal d’audit.
  • Un rôle insuffisant. L’utilisateur WordPress est connecté, mais l’action demandée n’est pas dans ses capacités. L’API REST répond 403 avec un code du type rest_forbidden.
  • Un nonce invalide. WooCommerce ou le cœur WordPress refuse un formulaire dont le jeton a expiré ou a été servi depuis un cache. Le code interne ressemble à rest_cookie_invalid_nonce.
  • Un blocage par pays ou par hotlink. L’image s’affiche sur votre domaine et répond 403 partout ailleurs.

Aucune de ces situations ne se règle en régénérant un mot de passe.

Isoler la règle

Notez l’URL exacte, le verbe HTTP et si vous étiez connecté.

  1. Ouvrez la même URL en navigation privée et depuis un partage de connexion. Si seul votre IP de bureau passe, la liste d’autorisation est en cause.
  2. Lisez le corps de la réponse. Un message ModSecurity, un texte « Sorry, you are not allowed to access this page » de WordPress, ou une page nue du serveur ne désignent pas le même composant.
  3. Cherchez dans le journal du WAF l’identifiant de règle à la minute du refus.
  4. Si le 403 n’existe qu’après une mise en cache, comparez deux chargements du formulaire. Un nonce identique servi à tout le monde est un cache de page connectée.
  5. Contrôlez depuis l’extérieur avec un test d’URL, sans cookie d’administration. Une fiche produit en 403 pour tout le monde n’est pas un simple compte de test.

Si le refus coïncide avec un utilisateur administrateur que vous n’avez pas créé, arrêtez les essais de droits et passez par la procédure pour nettoyer un WordPress infecté.

Lever le blocage sans ouvrir le site

ConstatAction
Fichier illisible par le serveurRétablir la lecture pour l’utilisateur du serveur web, pas pour « tout le monde »
Require all denied trop largeLimiter la règle au fichier visé (xmlrpc.php, un backup), pas à tout le site
Règle WAF identifiéeDésactiver cette règle sur l’URL concernée, après avoir lu ce qu’elle cherchait
Rôle trop faibleDonner la capacité manquante, ou utiliser un compte adapté
Nonce en cacheExclure la page du cache pleine page
Blocage géographique non vouluRetirer le pays réellement ciblé par vos clients

Rejouez la requête qui échouait. Puis vérifiez qu’une URL qui doit rester interdite l’est encore : un correctif qui « répare » le 403 en autorisant tout le serveur a simplement déplacé le problème.

Ce qu’il ne faut pas faire

Ne passez pas les dossiers en 777. Le 403 disparaît parfois, et n’importe qui peut alors écrire dans le site. Ne coupez pas le WAF entier pour une règle. Ne confondez pas avec un 401 : ajouter un mot de passe Basic devant une URL déjà refusée par ModSecurity empile deux contrôles. Ne masquez pas le 403 par une redirection vers l’accueil : le visiteur et le moteur voient un détour, pas la page.

Une URL métier qui répond 403 de façon intermittente se suit comme le reste de la disponibilité. La méthode pour tester si un site répond vraiment sert ici à séparer un refus local, lié à votre IP ou à votre session, d’un refus pour tous les visiteurs.

Questions fréquentes

Quelle est la différence entre un 401 et un 403 ?

Le 401 demande des identifiants valides et devrait envoyer WWW-Authenticate. Le 403 dit que la requête est comprise et refusée, même si l’utilisateur est déjà reconnu.

Un 403 sur wp-admin est-il toujours une attaque ?

Non. Un plugin de sécurité, un nonce de formulaire expiré ou un rôle trop faible produisent le même code. Regardez l’URL exacte et le message du corps avant de conclure.

Pourquoi la page s’ouvre depuis le bureau et pas depuis un mobile ?

Une liste d’adresses IP autorisées, ou un pare-feu géographique, laisse passer le réseau de l’entreprise et refuse le reste. Le test doit partir d’un autre réseau.

Surveiller mes URL