Hoe deze controle werkt
Scanaris vraagt zeven paden op waar de meest gangbare applicaties hun logs schrijven als niemand ze iets anders vertelt: /debug.log, /error.log, /error_log, /laravel.log, /storage/logs/laravel.log, /npm-debug.log en /wp-content/debug.log. Als een ervan antwoordt met een tekstbestand dat op een log lijkt, en niet met de generieke pagina van je site, opent hij een bevinding met gemiddelde ernst en het pad. Logs bevatten zelden de hele database, vandaar niet kritiek; maar weinig bestanden zeggen zoveel over de interne werking van je site.
Waarom dit belangrijk is
Een foutlog is het dagboek van alles wat misging: interne serverpaden, bestands- en functienamen, exacte bibliotheekversies, mislukte databasequery's met hun parameters, IP-adressen van gebruikers, soms e-mails of tokens die in een verzoek opdoken. Daarmee weet wie een kwetsbaarheid zoekt precies waar te kijken en welke versie aan te vallen. En het log groeit: elke dag van blootstelling vertelt meer.
Waarom het gebeurt
WordPress met WP_DEBUG_LOG ingeschakeld schrijft naar wp-content/debug.log, en dat is een openbare map; dit is het meest voorkomende geval. Laravel bewaart zijn logs in storage/logs, dat niet bereikbaar zou moeten zijn, maar dat wel is wanneer de server naar de projectroot wijst in plaats van naar public/. Apache op shared hosting laat error_log naast de sitebestanden staan. En npm-debug.log verschijnt wanneer een installatie op de server is mislukt en niemand heeft opgeruimd.
Hoe je het oplost
- WordPress: in productie
define('WP_DEBUG', false);inwp-config.php. Heb je het log tijdelijk nodig, verplaats het dan uit de openbare map metdefine('WP_DEBUG_LOG', '/prive/pad/debug.log');en verwijder het huidige bestand. - Laravel: de webserver moet naar de map
public/van het project wijzen, nooit naar de root. Zo isstorage/niet meer bereikbaar. EnAPP_DEBUG=false. - Node en andere: schrijf logs buiten de geserveerde map en stuur ze zo mogelijk naar een logdienst. Verwijder
npm-debug.logen vergelijkbare bestanden van de server. - Blokkeer de extensie aan serverkant als tweede barrière. In nginx:
location ~* \.log$ { deny all; }. In Apache:<FilesMatch "\.log$"> Require all denied </FilesMatch>. - Beperk wat je in productie logt: niveau error in plaats van debug, zonder volledige request-bodies of tokens te dumpen.
Controleer of het opgelost is
for p in debug.log error.log error_log laravel.log storage/logs/laravel.log npm-debug.log wp-content/debug.log; do
printf "%-28s " "$p"; curl -s -o /dev/null -w "%{http_code}\n" "https://jouwdomein.nl/$p"
done
Verwacht: overal 404 of 403. Is je site een single-page app die 200 antwoordt met haar HTML, dan is dat niet het log; open het om te bevestigen.
Veelgestelde vragen
Mijn log bevat niets gevoeligs, alleen PHP-waarschuwingen.
Die waarschuwingen bevatten de volledige serverpaden en de pluginversies, precies wat een aanvaller gebruikt om te kiezen welke exploit hij probeert. En vandaag staat er niets gevoeligs in; morgen, met een nieuwe fout, kan dat anders zijn.
Moet ik logs helemaal uitschakelen?
Nee. Ze mogen alleen niet openbaar zijn. Log wat je wilt in een map die de webserver niet serveert, of in een externe dienst.
Geldt dit voor mij op Vercel of Netlify?
Bijna nooit: daar worden logs niet naar openbare bestanden geschreven, maar bekeken in het dashboard. De bevinding duikt vooral op bij zelf gehoste servers, WordPress en shared hosting.