✦ Oplossingen · HTTP-foutcodes

403 Forbidden: toegang geweigerd tot een pagina

Zie je 403 Forbidden of ‘You don’t have permission to access this resource’? De server weigert de toegang. Zo vind je de oorzaak: rechten, index-bestand, regels of blokkade.

Zo ziet de foutmelding eruit

  • 403 Forbidden
  • You don't have permission to access this resource.
  • HTTP ERROR 403
  • Sorry, you have been blocked

Waarom gebeurt dit?

Een 403 Forbidden betekent dat de server de aanvraag heeft begrepen, maar weigert hem uit te voeren. Anders dan bij 401 helpt opnieuw inloggen hier meestal niet: de server heeft besloten dat deze aanvraag niet mag, voor jou of voor iedereen.

Op een eigen website zijn er vier gebruikelijke oorzaken. Eén: bestandsrechten of eigenaar kloppen niet, waardoor de webserver het bestand of de map niet mag lezen. Twee: je opent een map zonder index-bestand (index.html of index.php) terwijl het tonen van mapinhoud uit staat; dat hoort uit te staan. Drie: een regel in .htaccess of de nginx-configuratie weigert de toegang, bijvoorbeeld op IP-adres of bestandstype. Vier: een firewall of WAF (web application firewall, een filter dat verdachte aanvragen tegenhoudt) blokkeert je IP-adres of je aanvraag.

Ben je bezoeker, dan kun je zelf weinig veranderen aan rechten of regels. Wel kun je nagaan of de blokkade aan jouw verbinding ligt, bijvoorbeeld door een VPN of een gedeeld IP-adres dat eerder verdacht gedrag liet zien.

Zo herken je dit probleem

  • Alleen jij krijgt de fout en anderen niet: waarschijnlijk een blokkade op je IP-adres, VPN of browser.
  • Iedereen krijgt de fout op één map of bestand: rechten, een ontbrekend index-bestand of een deny-regel.
  • Je wordt gevraagd in te loggen of je login mislukt: dat is 401 Unauthorized.
  • De fout begon direct na een upload, verhuizing of wijziging in .htaccess: kijk eerst naar rechten en regels. Een kapotte .htaccess geeft eerder een 500-fout.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Controleer het adres en herlaad

    Kijk of je naar een bestaande pagina gaat en niet naar een map (een adres dat eindigt op /map/ zonder pagina). Herlaad de pagina en probeer de homepage van de site. Werkt de homepage wel, dan gaat het om dat ene onderdeel.

  2. Test zonder VPN en via een ander netwerk

    Zet een VPN of proxy uit en probeer het opnieuw, of test via mobiele data. Krijg je dan wel toegang, dan blokkeert de site of de firewall ervoor jouw IP-adres. Een pagina met ‘Sorry, you have been blocked’ komt van een beveiligingsdienst vóór de website; neem dan contact op met de eigenaar van de site.

  3. Wis cookies en zet extensies uit

    Een verouderde sessiecookie of een extensie die headers aanpast kan een beveiligingsregel activeren. Test in een privévenster. Werkt het daar, wis dan de cookies van deze site.

  4. Beheerder: lees wat het foutenlog zegt

    Het foutenlog noemt de reden. Bij nginx: directory index of "…" is forbidden (map zonder index-bestand), (13: Permission denied) (rechten) of access forbidden by rule (een deny-regel). Bij Apache: AH01276: Cannot serve directory of client denied by server configuration.

    sudo tail -n 50 /var/log/nginx/error.log
    sudo tail -n 50 /var/log/apache2/error.log
  5. Beheerder: zet rechten en eigenaar goed

    Gangbaar is 755 voor mappen en 644 voor bestanden. De webserver moet élke map in het pad kunnen openen; namei -l toont de rechten van elke stap. Controleer ook de eigenaar: bestanden die als root zijn geüpload zijn soms niet leesbaar voor de gebruiker waaronder de webserver of PHP draait. Zie ook Permission denied: chmod en chown.

    namei -l /var/www/voorbeeld/public/index.php
    find /var/www/voorbeeld/public -type d -exec chmod 755 {} \;
    find /var/www/voorbeeld/public -type f -exec chmod 644 {} \;
  6. Beheerder: controleer het index-bestand

    Staat er in de map geen index.html of index.php, dan geeft de server 403 omdat het tonen van een mapoverzicht uit staat. Zet het mapoverzicht niet aan om dit op te lossen; dat toont al je bestanden aan iedereen. Zet het juiste index-bestand neer, of controleer of het in de configuratie staat.

    # nginx
    index index.php index.html;
    autoindex off;
    
    # Apache
    DirectoryIndex index.php index.html
    Options -Indexes
  7. Beheerder: zoek deny-regels en IP-blokkades

    Zoek in .htaccess en de serverconfiguratie naar regels die toegang weigeren, zoals deny all in nginx of Require all denied en Require ip in Apache. Controleer daarna de firewall en een eventuele WAF: in het logboek van die dienst zie je welke regel de aanvraag tegenhield. Bij fail2ban kun je een IP-adres controleren en vrijgeven.

    sudo nginx -T | grep -n -E 'deny|allow'
    grep -rn -E 'Require|Deny from' /var/www/voorbeeld/public/.htaccess
    sudo fail2ban-client status
    sudo fail2ban-client set <jail> unbanip 203.0.113.10
  8. Beheerder: kijk naar rechten binnen de applicatie

    Geeft niet de webserver maar de applicatie de 403, dan heeft de ingelogde gebruiker de rol of het recht niet. Controleer de gebruikersrol, of een beveiligingsplugin het beheer afschermt op IP-adres. Bij WordPress kan een beveiligingsplugin de oorzaak zijn; zet die tijdelijk uit om te testen.

Let op: Zet nooit alles op 777 om een 403 op te lossen. Dan mag iedere gebruiker en ieder proces op de server je bestanden wijzigen, en dat misbruiken aanvallers.

Wie geeft de 403: webserver, firewall of applicatie?

Het helpt om vast te stellen wélke laag de toegang weigert, want elke laag heeft een eigen oplossing.

  • Webserver (nginx/Apache): een kale foutpagina, en een regel in het foutenlog van de webserver.
  • Firewall of WAF ervoor: een eigen blokkadepagina, vaak met een referentienummer; niets in het log van je webserver.
  • Applicatie: een pagina in de opmaak van je site, bijvoorbeeld ‘Je hebt geen toegang tot deze pagina’.

Met curl -sI zie je de Server-header en andere headers, waarmee je vaak herkent welke laag antwoordde.

Wanneer schakel je hulp in?

  • De hele site geeft 403 na een verhuizing of een wijziging van rechten.
  • Je klanten of medewerkers worden geblokkeerd door een firewall of beveiligingsregel en je weet niet welke.
  • Je twijfelt welke rechten en eigenaar veilig zijn op je server.
  • De 403 komt uit de applicatie zelf en je kunt de rolinstellingen niet vinden.

Lukt het niet? Wij helpen

Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Wat betekent 403 Forbidden?

De server weigert de toegang tot deze pagina of map. Dat kan aan rechten, een ontbrekend index-bestand, een regel in de configuratie of een blokkade van je IP-adres liggen.

Waarom krijg alleen ik een 403 en anderen niet?

Waarschijnlijk wordt je IP-adres, VPN of browser geblokkeerd door een firewall of beveiligingsregel. Test via een ander netwerk en neem contact op met de eigenaar van de site.

Welke rechten moeten mijn websitebestanden hebben?

Meestal 755 voor mappen en 644 voor bestanden, met als eigenaar de gebruiker waaronder de website draait. Gevoelige configuratiebestanden kunnen strenger.

Moet ik directory listing aanzetten?

Nee. Zet liever een index-bestand in de map. Een open mapoverzicht laat zien welke bestanden er staan, ook die je niet wilt delen.