حذف هدرهای مربوط به وب سرور از طریق برنامه نویسی
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

در تکمیل این مطلب برای حذف هدرهای مربوط به وب سرور در برنامه‌های ASP.NET MVC از روش زیر می‌توانیم استفاده کنیم.

در حالت پیش فرض تمام پاسخهای که به سمت سرور ارسال میشوند به همراه خود یک سری جزئیات را نیز منتقل میکنند.

برای یک وب اپلیکیشن APS.NET MVC این هدرها را داریم :
  • Server: که توسط IIS اضافه میشود.
  • X-AspNet-Version: که در زمانFlush در httpresponse اضافه میشود.
  • X-AspNetMvc-Version: که توسط MvcHandler در System.Web.dll اضافه میشود.
  • X-Powered-By: این مورد نیز توسط IIS اضافه میشود.
 هکرها از اینکه فریم ورک مورد استفاده چه چیزی است خوشحال خواهند شد: اگر سرور شما برای مدتی Update نشده باشد و یک آسیب پذیری امنیتی بزرگ برای ورژن فریم ورکی که استفاده می‌کنید پیدا شود در نتیجه به هکرها برای رسیدن به هدفشان کمک کرده اید.
به علاوه این هدرها فضایی را برای تمام پاسخ‌ها در نظر میگیرند (البته در حد چندین بایت ولی در اینجا بحث برروی Optimization است). 
برای حذف این هدرها باید مراحل زیر را انجام دهیم: 
  1. حذف کردن هدر Server : به Global.asax.cs رفته و رویداد Application_PreSendRequestHeaders  با کد زیر را به آن اضافه کنید : 
        protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
         {
             var app = sender as HttpApplication;
             if (app == null || !app.Request.IsLocal || app.Context == null)
                 return;
             var headers = app.Context.Response.Headers;
             headers.Remove("Server");
         }
  2. حذف کردن هدر X-AspNetMvc-Version: در فایل Global.asax.cs  به رویداد Application_Start  این کد زیر را اضافه کنید : 
    protected void Application_Start()
         {
             ...
             MvcHandler.DisableMvcResponseHeader = true;
             ...
         }
  3. حذف کردن هدر X-AspNet-Version: به فایل Web.Config مراجعه کرده و این المنت را در داخل system.web اضافه کنید: 
    <system.web>
             ...
             <httpRuntime enableVersionHeader="false" />
             ...
    </system.web>
  4. حذف کردن هدر X-Powered-By: در داخل فایل Web.Config در داخل system.webServer این خطوط را اضافه کنید: 
    <system.webServer>
             ...
             <httpProtocol>
                 <customHeaders>
                     <remove name="X-Powered-By" />
                 </customHeaders>
             </httpProtocol>
             ...
    </system.webServer>
با انجام مراحل فوق پاسخ‌های سرور سبک‌تر شده و در نهایت حاوی اطلاعات مهم در مورد ورژن فریم ورک نمی‌باشد. 
  • #
    ‫۱۱ سال و ۶ ماه قبل، چهارشنبه ۱۴ فروردین ۱۳۹۲، ساعت ۰۴:۵۲
    ممنون از این مطلب مفید ولی من یک مشکلی دارم کاری که گفتید را انجام دادم وهمه چیز خوب انجام شد ولی 
    در بخش GET modernizr-2.5.3.js باز هم اطلاعات سرور رو به من میدهد

    • #
      ‫۱۱ سال و ۶ ماه قبل، چهارشنبه ۱۴ فروردین ۱۳۹۲، ساعت ۰۵:۰۶
      فایل‌های استاتیک رو هم باید به موتور ASP.NET مپ کنید. تا زمانیکه مپ نباشند مستقیما توسط IIS سرو می‌شن و تنظیمات ASP.NET روی اون‌ها تاثیری نداره.
      • #
        ‫۱۱ سال و ۶ ماه قبل، چهارشنبه ۱۴ فروردین ۱۳۹۲، ساعت ۱۵:۱۰
        نمی دونم این کاری که گفتین رو دقیقا چطور انجام بدهم ولی این کار باعث ایجاد کندی نمی‌شه؟ اگر در خود IIS تنظیمات این پست رو اعمال کنم به نتیجه میرسم؟
        • #
          ‫۱۱ سال و ۶ ماه قبل، چهارشنبه ۱۴ فروردین ۱۳۹۲، ساعت ۱۵:۴۳
          - برای فایل‌های جاوا اسکریپت توصیه من این است:
          الف) اگر از Web forms استفاده می‌کنید: استفاده از Script manager (^ و ^)
          ب) اگر از MVC استفاده می‌کنید: استفاده از Bundling & minification
          در هر دو حالت نحوه ارائه اسکریپت‌ها تحت کنترل برنامه ASP.NET در خواهد آمد و مستقیما و بدون دخالت ASP.NET، توسط IIS توزیع نمی‌شوند.
          - برای مپ کردن فایل‌های استاتیک به موتور ASP.NET می‌شود از StaticFileHandler استفاده کرد. اگر کش کردن اطلاعات استاتیک در سمت سرور فعال شود، این مساله بار اضافه‌ای را به سرور تحمیل نخواهد کرد.
          <system.web>
             <httpHandlers>
                <add path="*.js" verb="*" type="System.Web.StaticFileHandler" />
             </httpHandlers>
  • #
    ‫۱۱ سال و ۱ ماه قبل، شنبه ۲ شهریور ۱۳۹۲، ساعت ۱۶:۰۴
    سلام.من ازش استفاده کردم ولی موقع حذف Header مربوط به سرور ارور زیر رو میده:
    This operation requires IIS integrated pipeline mode.
    ضمنا من از iis 7.5 استفاده می‌کنم و توی Application Pools هم Classic .Net AppPool رو در حالت pipeline mode:Integrated قرار دادم هم DefaultAppPool ولی همچنان ارور رو دارم.مشکل از کجاست؟
    ممنون.
    • #
      ‫۱۱ سال و ۱ ماه قبل، شنبه ۲ شهریور ۱۳۹۲، ساعت ۱۶:۲۴
      - محل تست کردن واقعی این کدها بر روی ویندوز سرور است و نه دیباگر و وب سرور آزمایشی ویژوال استودیو.
      - شما اگر تا این حد دسترسی به IIS دارید، اصلا نیازی به کدنویسی برای حذف هدرهای وب سرور نخواهید داشت. به قسمت HTTP response headers کنسول مدیریتی مراجعه و مداخل موجود را حذف یا ویرایش کنید.
      + حذف هدر مربوط به نام Server کار ساده‌ای نیست. خیلی‌ها از روش HTTP module هم جواب نگرفته‌اند، اما با استفاده از URL Scan خود مایکروسافت قابل حذف است (این برنامه روی ویندوزهای سرور 2003 به بعد قابل نصب است). بعد از نصب به فایل C:\Windows\System32\inetsrv\urlscan\UrlScan.ini مراجعه و RemoveServerHeader را با 1 مقدار دهی کنید. ضمنا قبل از نصب URLScan تغییر زیر را هم امتحان کنید (بجای Remove از Set استفاده شده):
      void OnPreSendRequestHeaders(object sender, EventArgs e) 
      {
         HttpContext.Current.Response.Headers.Set("Server", "CERN httpd"); 
      }
  • #
    ‫۱۰ سال و ۴ ماه قبل، جمعه ۱۶ خرداد ۱۳۹۳، ساعت ۰۱:۰۵
    با سلام؛ ممنون از مطلب خوبتون. من تو IIS 8 Local اجرا کردم درست کار میکنه و بسیار عالیه. اما تو اجرای نهایی روی سرور هدر Server حذف نشد و از سمت سرور ارسال میشد. بعد از کلی جستجو به نتیجه زیر رسیدم.
    <system.webServer>
        <rewrite>
          <outboundRules>
            <rule name="Remove RESPONSE_Server" >
              <match serverVariable="RESPONSE_Server" pattern=".+" />
              <action type="Rewrite" value="" />
            </rule>
          </outboundRules>
        </rewrite>
      </system.webServer>
  • #
    ‫۹ سال و ۹ ماه قبل، سه‌شنبه ۲ دی ۱۳۹۳، ساعت ۱۵:۰۹
    ممنون از مطلبتون
    فقط یک نکته رو میخواستم بگم نام کوکی سشن بطور پیشفرض ASP.NET_SessionId  هست و میشه از این نام فهمید که سرور asp.net هستش. از طریق کد زیر توی وب کانفیگ میتونید تغییرش بدید:
    <system.web>
        <sessionState cookieName="foo" />
    </system.web>
  • #
    ‫۵ سال و ۳ ماه قبل، شنبه ۱۱ خرداد ۱۳۹۸، ساعت ۲۱:۰۳
    یک نکته تکمیلی: برای حذف کردن هدر Server در IIS 10.0 میتوان با تنظیم requestFiltering به صورت زیر عمل کرد:
    <system.webServer>
             ...
             <security>
               <requestFiltering removeServerHeader ="true" />
             </security>
             ...
    </system.webServer>