Hoe verwijder ik header informatie uit HTTP-reactieheaders, zoals de Server
-header? Vanuit een beveiligingsoogpunt is het verstandig bepaalde informatie uit je HTTP-reactieheaders te verwijderen. Eén zo’n header is de Server-header. In de Server header vertelt een webserver graag welke software hij is, bijvoorbeeld Microsoft-IIS/10.0 of Apache. Voor een aanvaller is dit waardevolle informatie, en daarom doe je er verstandig aan deze Server header te verwijderen, je leest hier hoe…
Normale HTTP-reactieheader
Ik ben geen fan van security through obscurity, maar ik vind ook dat je een aanvaller niet wijzer moet maken dan hij al is. En uit HTTP-reactieheaders valt heel veel waardevolle informatie te halen. Beperk dit daarom zoveel mogelijk.
Een normale HTTP-reactie header, in response op een HEAD-request, ziet er als volgt uit en verstuurt o.a de volgende informatie naar de client:
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Mon, 23 Sep 2019 11:44:52 GMT
Hier zie je twee headers met belangrijke informatie:
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Laten we deze verwijderen.
Server: reactieheader verwijderen met IIS requestFiltering
In IIS 10.0 ( Windows Server, version 1709 of Windows 10, version 1709) kun je een requestFiltering regel maken om de Server: header te verwijderen uit de reactie.
Alleen een systeembeheerder heeft permissies dit in te stellen. In IIS 10 op Windows Server 2016 en IIS 8.5 en lager werkt dit helaas niet en moet je -als gebruiker / websitebeheerder- een IIS URL Rewrite Module outboundRule gebruiken om de waarde te verwijderen. Onderaan dit artikel wordt dit behandeld.
Om de requestFiltering
regel removeServerHeader te maken log je in op de server met IIS Manager. Ga naar de desbetreffende website, en in de Features View klik je op Configuration Editor.
In IIS Manager Configuration Editor ga je naar de Section system.webServer/security/requestFiltering
en hier zie je False staan bij removeServerHeader. Zet deze value op True en klik Apply rechts onder Actions.
Klik je niet door naar een site, maar voer je dit uit op de Server node, dan geldt de instelling voor alle in IIS gehoste websites. Handig hè?! :) Ook kun je in een Web.config XML-configuratiebestand de volgende code opnemen wat hetzelfde bewerkstelligt:
<system.webServer>
<security>
<requestFiltering removeServerHeader="true" />
</security>
</system.webServer>
Je zult hierna zien dat de Server:-reactieheader verdwenen is uit de response.
URL Rewrite Module outboundRule om Server: header mee te verwijderen
Als je geen gebruik kunt maken van requestFiltering om de Server:
reactieheader te verwijderen, dan moet je hiervoor een URL Rewrite Module outboundRule hiervoor aanmaken. Een outboundRule stelt je in staat om in de output stream van de HTTP response te schrijven. Zo kun je alles wat de webserver naar de client stuurt nog veranderen (sneaky hè? :)).
Om de Server: reactieheader te verwijderen met een outboundRule moet je het volgende opnemen in het web.config
-bestand:
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
Wat hier opvalt is dat je de header eigenlijk niet verwijdert, maar herschrijft. Je vervangt Microsoft-IIS/10.0 door niets (""
). Of door jouw eigen tekst:
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="ITFAQ.nl snelle webserver" />
</rule>
</outboundRules>
</rewrite>
Dit stuurt ITFAQ.nl snelle webserver terug als header.
Server-reactieheader minimaliseren in Apache (Bonus!)
In Apache webservers kun je helaas geen Server reactieheaders aanpassen of verwijderen in jouw website’s .htaccess
. Hiervoor moet je in de serverconfiguratie zijn. Dat is bijvoorbeeld /etc/httpd/conf/httpd.conf
of /etc/apache2/apache2.conf
. Hierin moet je het volgende opnemen:
ServerSignature Off
ServerTokens Prod
Hier zorgt ServerSignature voor het weergeven van Apache, versie en besturingssysteem op foutpagina’s, zoals 404. De ServerTokens configurate regelt of je wel of niet Apache’s versie en het besturingssysteem wilt meesturen als Server: header. Hier zorgt Prod ervoor dat alleen Apache wordt genoemd.
Security through obscurity
The idea of “security through obscurity” is a myth and leads to a false sense of safety.