U tikt een adres in van een map op uw eigen site, bijvoorbeeld uwdomein.nl/wp-content/uploads/2024/, en in plaats van een foutmelding krijgt u een keurig lijstje met bestandsnamen, formaten en datums. Dat is de standaardweergave van een webserver, en het is precies waarom directory listing uitschakelen op vrijwel elke beveiligingschecklist staat.

Het is geen groot gat en er wordt zelden rechtstreeks misbruik van gemaakt. Het is wel gratis informatie voor wie kwaad wil, en het uitzetten kost vijf minuten. Hieronder leest u waarom het onhandig is en hoe u het per situatie oplost.

Wat een open map precies verklapt

Een webserver die geen indexbestand aantreft, laat standaard zien wat er wél in de map staat. Bij WordPress levert dat op verschillende plekken een inkijkje op.

  • In wp-content/plugins/ ziet iemand welke plugins u draait, inclusief namen die u zelf misschien vergeten was. Draait daar een plugin met een bekende kwetsbaarheid, dan is dat een uitnodiging.
  • In wp-content/themes/ staat welk thema u gebruikt en of er nog oude thema’s meelopen.
  • In de uploadmappen staan alle bestanden die ooit zijn geüpload. Dus ook die offerte in pdf die u had geüpload maar nooit aan een pagina heeft gekoppeld, en de conceptversie van uw prijslijst.
  • In back-upmappen staan soms complete archieven van uw site, inclusief database. Dat is de variant die wél echt gevaarlijk is.

Dat laatste punt is de reden om dit serieus te nemen. Wij zijn back-upbestanden tegengekomen die vrij te downloaden waren via een open map. In zo’n archief zit uw databasewachtwoord, uw complete klantbestand en alle gebruikers.

Test het bij uzelf

Open een incognitovenster en probeer deze adressen, met uw eigen domein ervoor:

  1. /wp-content/uploads/ en een jaartalmap daaronder.
  2. /wp-content/plugins/ en /wp-content/themes/.
  3. /wp-includes/.
  4. Elke map die uw back-upplugin gebruikt; de naam daarvan staat in de instellingen van die plugin.

Krijgt u een foutmelding met de code 403 of een lege pagina, dan is het goed geregeld. Ziet u een lijst met bestandsnamen, dan staat de map open. Krijgt u een pagina met een foutmelding van WordPress, dan is het ook in orde.

Merkt u dat de hele site een bestandslijst toont in plaats van uw homepage, dan heeft u een ander probleem: dan wordt uw indexbestand niet uitgevoerd. Dat staat los van deze instelling en wordt behandeld in het artikel over een site die een bestandslijst laat zien.

Waarom het bij de een wel en bij de ander niet openstaat

Of u een lijst te zien krijgt, hangt niet van WordPress af maar van de instellingen van uw webserver. Bij een deel van de Nederlandse hostingpartijen staat mapindexering standaard uit voor alle klanten; bij een ander deel staat hij standaard aan omdat dat de oorspronkelijke instelling van de software is. U kunt er dus niet van uitgaan dat het bij u geregeld is omdat het bij een vorige site zo was.

Wat het extra verwarrend maakt: WordPress zet in een aantal mappen zelf een leeg indexbestand neer. Daardoor lijkt het geregeld zolang u alleen naar wp-includes kijkt, terwijl de uploadmappen die WordPress per maand aanmaakt gewoon open staan. Test daarom altijd een map met een jaartal en een maandnummer, en niet alleen de bovenliggende map.

Uitzetten: drie routes

Via uw hostingpaneel

De makkelijkste weg, en meteen de veiligste. In DirectAdmin, cPanel en Plesk zit een instelling met een naam als “indexing” of “mapindexering”. Zet die uit voor het hele account. U hoeft dan aan geen enkel bestand te komen.

Via het .htaccess-bestand

Draait uw site op een Apache-server, dan volstaat één regel in het .htaccess-bestand in de hoofdmap van uw site: Options -Indexes. Zet die regel bovenaan, buiten het blok dat WordPress zelf beheert, want dat blok wordt bij het bijwerken van uw permalinks overschreven.

Maak eerst een kopie van het bestaande bestand. Een fout in .htaccess legt uw hele site plat, en dat is een vervelende manier om een kleine verbetering te leren. Wat u dan doet, staat in de uitleg over het herstellen van een corrupt .htaccess-bestand.

Via uw beveiligingsplugin

De meeste beveiligingsplugins hebben een vinkje dat hetzelfde doet. Prima oplossing, met één kanttekening: schakelt u die plugin ooit uit, dan staan de mappen weer open zonder dat u het merkt.

Draait uw site op een Nginx-server, dan werkt .htaccess niet. Daar staat mapindexering standaard al uit, en anders is het een aanpassing in de serverconfiguratie die uw hostingpartij moet doen.

De aanvullende maatregel die vaak wordt vergeten

Er bestaat een oudere aanpak waarbij in elke map een leeg indexbestand wordt gezet. De server vindt dan een bestand en toont geen lijst. Dat werkt, maar u moet het in elke map herhalen en bij elke nieuwe uploadmap opnieuw. Als losse oplossing is het achterhaald; als extra laag naast de serverinstelling is het geen kwaad.

Belangrijker is dit: mapindexering uitzetten verbergt de lijst, maar niet de bestanden. Wie de exacte bestandsnaam raadt of ergens vindt, kan het bestand nog steeds downloaden. Voor gevoelige documenten is een open uploadmap dus sowieso de verkeerde plek, hoe u de map ook afschermt. Zet contracten, offertes en ledenlijsten achter een afgeschermde downloadpagina of buiten de website.

Ruim in dezelfde beurt uw uploadmap op: verwijder back-upbestanden die er niet horen, oude exports en testbestanden. Dat is opruimwerk dat bij WebMaintor hoort bij het periodiek afdichten van kleine gaten in een WordPress-site, samen met het controleren of er geen archief van uw eigen site publiek toegankelijk staat.

Concrete volgende stap: open /wp-content/uploads/ op uw eigen site in een incognitovenster. Ziet u een bestandslijst, dan weet u precies wat er vandaag nog geregeld moet worden.