IIS te Response Header'ların değiştirilmesi / silinmesi

Merhaba arkadaşlar,

 IIS ‘te Http Response üretilirken Response Header’larında ASP.NET versiyon bilgisi (X-ASPNet-Version) ve Sunucu sürümü (Server) varsayılan kurulumlarda gösterilmektedir. İstemciye bu bilgilerin gönderilmesi, sistemin yapısı hakkındaki bilgilerin açığa vurulması açısından önemli olarak görülebilir.

Sizlere bu makalede bunu engellemek için kullanabileceğimiz yöntemlerden bahsedeceğim.

'X-AspNet-Version' değerinin gösterilmemesi için, Konfigürasyon dosyasında ‘HttpRuntime’ elementine ait bir flag olan ‘enableVersionHeader’ değerini false yapmak yeterlidir. Bu değeri değiştirdikten sonra ‘Fiddler’ kullanarak bu bilginin açığda çıkarılıp çıkarılmadığını test edebilirsiniz. ‘Fiddler’ kurulumundan sonra aşağıdaki gibi bir GET request’I ile IIS uygulamanıza bir ‘HttpRequest’ de bulunun:

 
 
Bu request sonrasında soldaki menüden Response Header’lar altında bu bilgilerin açığa çıkarıldığını görebiliyoruz.

 

 Şimdi X-AspNet sürüm bilgisini gizlemek için uygulamanın konfigürasyon dosyası olan ‘web.config’ içerisinde aşağıdaki gibi bir değişiklik yapalım. 

<?xml version="1.0"
encoding="UTF-8"?>

<configuration>

  <system.web>

  <httpRuntime enableVersionHeader = "False" />

  </system.web>

…</configuration>

Composer ile tekrar deneme yaptığımızda bu bilginin artık gösterilmediğini görüyoruz:

 

 ‘Server’ bilgisini gizlemek için ise önerilebilecek iki çözüm mevcut

 #1 ‘UrlScan’ yada ‘URL Rewrite’ modüllerini kurarak bir tool aracılığı ile bu ‘Response Header’ I gizlemek.

#2 Bu işlemleri yapmak için kendi modülünüzü yazmak.

Kendi modülünüzü yazmak için bu makaleyi takip edebilirsiniz. Modülünüzü oluşturduktan sonra bu modülü konfigürasyon dosyası içerisinde ‘System.WebServer’ kofigürasyon nesnesinde
‘modules’ altında belirtmeniz yeterli. <configuration>

<system.webServer>

<modules>

<add name="CustomServerHeader" type="MyNameSpace.ServerModules.CustomServerHeaderModule" />

</modules>

</system.webServer>

</configuration>

İkinci yol olarak URLScan tool’unu yada ‘URL Rewrite modülü’nü kullanabilirsiniz. Burada dikkat etmemiz gereken şey URLScan modülünün sadece IIS7.0 ye kadar olan sürümlerde destekleniyor olması. Bunu ilgili makalede ‘System Requirenments’ kısmına baktığınızda da görebilirsiniz. IIS 7.5 ve üzeri versiyonlar için (IIS 8.0) ‘URL Rewrite modülü’ nü kullanmanızı öneriyoruz.

 URLScan tool’unda ‘Server’ ‘Response Header’ını gizlemek için yapılması gereken, URLScan tool’unun kurulum klasöründe bulunan konfigürasyon dosyası (%Systemroot%\System32\inetsrv\urlscan\UrlScan.ini) nı açıp içerisinde ‘RemoveServerHeader’ değerini ‘1’ yapmak.

RemoveServerHeader=1 ; If 1, remove the 'Server' header from 

Bu işlem IIS 7.5 üzerinde de çalışıyor elbette ama bahsettiğim gibi desteği sadece IIS 7.0 ve önceki versiyonlar için.

 ‘URL Rewrite’ modülü de prensip olarak ‘Rule'-‘Action’ prensibine göre çalışıyor ve response header’ları değiştirilebiliyor. IIS 7.5 için bu modülü haricen yüklemeniz gerekiyor. Bu modülü IIS Manager içerisinde ‘Features View’ altında değişik seviyelerde görebilirsiniz. Modülü seçtikten sonra soldaki menüden ‘Add Rule’ seçip aşağıdaki gibi ‘Outbound rules’ altından ‘Blank Rule’ seçiyoruz:

Sonrasında ise aşağıdaki şekilde kuralımızı tanımlıyoruz:

‘Apply’ diyerek bu konfigürasyonu kaydettiğimizde web.config içerisinde ilgili tanımın oluştuğunu görebilirsiniz:

   
<system.webServer>

 <rewrite>

  <outboundRules>

   <rule name="RemoveServer" patternSyntax="ExactMatch">

    <match serverVariable="RESPONSE_SERVER" pattern="Microsoft-IIS/7.5" />

   <action type="Rewrite" value="MyServer" />

  </rule>

 </outboundRules>

   
 </rewrite>

   </system.webServer>

 Eğer aynı şekilde başka bir Response Header’ının yerine başka bir değer yazılmasını istiyorsanız 'serverVariable' değişkenini RESPONSE_XXXX şeklinde değiştirerek bunu  gerçekleştirebilirsiniz. Örneğin content-type için bu değer RESPONSE_CONTENT_TYPE olmalı. Bu değişikliği yaptıktan sonra aynı şekilde Fiddler ile IIS sitenizi Fiddler ile test edip ilgili Response Header’ının gizlendiğini göreceksiniz.

 İyi çalışmalar,

Mert