ลบ Server Response Header IIS7


107

มีวิธีใดในการลบส่วนหัวการตอบกลับ "เซิร์ฟเวอร์" ออกจาก IIS7 หรือไม่ มีบางบทความที่แสดงให้เห็นว่าการใช้ HttpModules เราสามารถบรรลุสิ่งเดียวกันได้ สิ่งนี้จะเป็นประโยชน์หากเราไม่มีสิทธิ์ผู้ดูแลระบบในเซิร์ฟเวอร์ ฉันไม่ต้องการเขียนตัวกรอง ISAPI

ฉันมีสิทธิ์ระดับผู้ดูแลระบบในเซิร์ฟเวอร์ของฉัน เลยไม่อยากทำของข้างบน ดังนั้นโปรดช่วยฉันทำเช่นเดียวกัน


คำตอบ:


111

เพิ่มสิ่งนี้ใน global.asax.cs ของคุณ:

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}

11
ไม่รู้ว่าทำไมคำตอบของโมดูล http ถึงสูงกว่าอันนี้อันนี้ง่ายกว่ามาก
jjxtra

2
คุณอาจพบว่าคุณจะได้รับในการแคสสินีถ้าคุณพึ่งพาNullReferenceException โพสต์บล็อกนี้แสดงวิธีการทำในขณะที่หลีกเลี่ยงการทำลายการสนับสนุน Cassini หากนั่นสำคัญสำหรับคุณ HttpContext.Current
Owen Blacker

49
@PsychoDad สิ่งนี้ใช้ได้กับคำขอ ASP.NET เท่านั้นไม่ใช่สำหรับไฟล์คงที่เช่น. css และ. js
Max Toro

1
ในการกำจัดส่วนหัว MVC คุณสามารถทำ MvcHandler.DisableMvcResponseHeader = true;
ProVega

7
มันไม่ได้เป็นความคิดที่ดีที่จะใช้PreSendRequestHeadersในชั้นเรียนว่าการดำเนินการหรือIHttpModule Global.asaxฉันได้เห็นเหตุการณ์ที่ทำให้แอปค้างบนเซิร์ฟเวอร์ภายใต้ภาระความเครียด BeginRequestเหตุการณ์ควรจะทำงานเพื่อให้การเปลี่ยนแปลงส่วนหัวของการตอบสนอง ดูhanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx
Dmitry S.

77

ใน IIS7 คุณต้องใช้โมดูล HTTP สร้างสิ่งต่อไปนี้เป็นไลบรารีคลาสใน VS:

namespace StrongNamespace.HttpModules
{
  public class CustomHeaderModule : IHttpModule
  { 
    public void Init(HttpApplication context)
    {
      context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    } 

    public void Dispose() { } 

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
      HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts");
    }
  }
}

จากนั้นเพิ่มสิ่งต่อไปนี้ใน web.config ของคุณหรือกำหนดค่าภายใน IIS (หากคุณกำหนดค่าภายใน IIS แอสเซมบลีจะต้องอยู่ใน GAC)

<configuration>
  <system.webServer>
    <modules>
      <add name="CustomHeaderModule"
       type="StrongNamespace.HttpModules.CustomHeaderModule" />
    </modules>
  </system.webServer>
</configuration>

ยอดเยี่ยมฉันยังสามารถปรับแต่งสิ่งนี้เพื่อลบส่วนหัว ETag ในเซิร์ฟเวอร์ฟาร์มของฉัน
devstuff

สิ่งนี้ทำให้เกิดข้อผิดพลาดรันไทม์ในเซิร์ฟเวอร์ casini ... / ASP.NET Dev
UpTheCreek

2
@UpTheCreek เซิร์ฟเวอร์ ASP.Net dev (Cassini) จะไม่ชอบรหัสนั้น อย่างไรก็ตามโพสต์บล็อกนี้มีวิธีแก้ไข - คุณต้องตรวจสอบว่าHttpApplicationthe HttpRequest, the HttpContext, และHttpResponseare not nullรวมทั้งตรวจสอบว่าHttpRequest.IsLocalเป็นfalseอย่างไร
Owen Blacker

2
เนื่องจากการแก้ไขส่วนหัวในPreSendRequestHeadersอาจทำให้เกิดปัญหากับ HttpCacheModuleคุณควรใช้สิ่งที่ต้องการPostReleaseRequestStateแทน
Eirik H

5
โมดูลจะไม่ถูกเรียกใช้เมื่อ IIS ส่ง 304 Not Modified header สำหรับไฟล์คงที่ (css / less / images / etc) เนื่องจากไม่ถึงไปป์ไลน์ ASP.NET ดังนั้นในสถานการณ์นี้เซิร์ฟเวอร์: Microsoft IIS / 7.5 ยังคงแสดงผล
Jano

42

ด้วย URL Rewrite โมดูลเวอร์ชั่น 2.0 สำหรับ IIS (UrlRewrite) เปิดการใช้งานในส่วนการกำหนดค่า<configuration><system.webServer><rewrite>เพิ่มกฎขาออก:

<outboundRules>
  <rule name="Remove RESPONSE_Server" >
    <match serverVariable="RESPONSE_Server" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>

11
โปรดทราบว่านี่เป็นช่องว่างเฉพาะส่วนหัวของเซิร์ฟเวอร์ แต่จะไม่ลบออก
Nick Evans

ขออภัยในความไม่รู้ แต่ควรเพิ่มในส่วนไหนดี! ฉันลองเพิ่มภายใน <system.webServer>
Vignesh Subramanian

1
ขอบคุณ! ทำงานใน IIS 8.5 ซึ่งง่ายมาก ฉันไม่มีโปรแกรมแก้ไขข้อความ แต่คุณสามารถใช้ GUI ได้อย่างง่ายดาย ชื่อควรเป็น RESPONSE_Server ไม่ใช่เฉพาะเซิร์ฟเวอร์ (นี่คือที่ที่ฉันล้มเหลวในตอนแรก)
Louis Matthijssen

นี่ดีพอถ้าคุณมีแอปพลิเคชันที่ไม่ใช่ ASP.Net ดังนั้นคุณจึงไม่สามารถลบส่วนหัวของเซิร์ฟเวอร์ด้วยรหัสที่กล่าวถึงได้
mhesabi

4
@vignesh นี่คือโหนดย่อยของการกำหนดค่า UrlRewrite คุณต้องทำให้พวกเขาภายใต้โหนดในrewrite system.webServerระวังสิ่งนี้จะทำให้ไซต์ของคุณพังหากไม่ได้ติดตั้ง UrlRewrite บนเซิร์ฟเวอร์ และคุณควรใช้คอนโซลการกำหนดค่า IIS ก่อนเพื่อตรวจสอบว่ามันเขียนโหนดกำหนดค่าเหล่านั้นอย่างไร
Frédéric

36

สกอตต์มิทเชลล์ให้ในบล็อกโพสต์โซลูชั่นสำหรับการลบส่วนหัวที่ไม่จำเป็น

เป็นแล้วกล่าวว่าที่นี่ในคำตอบอื่น ๆ สำหรับServerส่วนหัวมีวิธีการแก้ปัญหาโมดูล httpหรือวิธีการแก้ปัญหา web.config สำหรับ IIS 10+ , หรือคุณสามารถใช้URLRewrite แทนว่ะมัน

โซลูชันที่ใช้งานได้จริงที่สุดสำหรับการตั้งค่าล่าสุด (IIS 10 +) กำลังใช้removeServerHeaderใน web.config:

<system.webServer>
  ...
  <security>
    <requestFiltering removeServerHeader="true" />
  </security>
  ...
</system.webServer>

สำหรับX-AspNet-VersionและX-AspNetMvc-Versionเขาให้วิธีที่ดีกว่าการลบออกในการตอบสนองแต่ละครั้ง: เพียงแค่ไม่สร้างเลย

ใช้enableVersionHeaderสำหรับปิดการใช้งานX-AspNet-Versionใน web.config

<system.web>
  ...
  <httpRuntime enableVersionHeader="false" />
  ...
</system.web>

ใช้MvcHandler.DisableMvcResponseHeaderในเหตุการณ์. Net Application_Start เพื่อปิดการใช้งานX-AspNetMvc-Version

MvcHandler.DisableMvcResponseHeader = true;

และสุดท้ายลบการกำหนดค่า IIS X-Powered-Byส่วนหัวที่กำหนดเองใน web.config

<system.webServer>
  ...
  <httpProtocol>
    <customHeaders>
      <remove name="X-Powered-By" />
    </customHeaders>
  </httpProtocol>
  ...
</system.webServer>

ระวังถ้าคุณมี ARR (Application Request Routing) มันจะเพิ่มของมันเองด้วยX-Powered-Byซึ่งจะไม่ถูกลบออกโดยการตั้งค่าส่วนหัวที่กำหนดเอง สิ่งนี้จะต้องถูกลบผ่านตัวจัดการ IIS, การกำหนดค่าตัวแก้ไขบนรูท IIS (ไม่ใช่บนไซต์): ไปที่system.webServer/proxyโหนดและตั้งค่าarrResponseHeaderเป็นfalse. หลังจากIISResetนั้นจะถูกนำมาพิจารณา
(ฉันพบสิ่งนี้ที่นี่ยกเว้นโพสต์นี้เกี่ยวกับวิธีการกำหนดค่า IIS 6.0 แบบเก่า)

อย่าลืมว่าการแก้ปัญหาโดยใช้รหัสแอปพลิเคชันไม่ได้ใช้โดยค่าเริ่มต้นกับส่วนหัวที่สร้างบนเนื้อหาคงที่ (คุณสามารถเปิดใช้งานrunAllManagedModulesForAllRequestsสำหรับการเปลี่ยนแปลงนั้น แต่จะทำให้คำขอทั้งหมดทำงานไปป์ไลน์. Net) ไม่ใช่ปัญหาX-AspNetMvc-Versionเนื่องจากไม่ได้เพิ่มในเนื้อหาคงที่ (อย่างน้อยถ้าคำขอแบบคงที่ไม่ได้รันใน. Net ไปป์ไลน์)

หมายเหตุด้านข้าง: เมื่อจุดมุ่งหมายคือการปิดบังเทคโนโลยีที่ใช้แล้วคุณควรเปลี่ยนชื่อคุกกี้. Net มาตรฐานด้วย ( .ASPXAUTHหากเปิดใช้งานฟอร์ม auth (ใช้nameแอตทริบิวต์บนformsแท็กใน web.config) ASP.NET_SessionId(ใช้<sessionState cookieName="yourName" />ใน web.config ภายใต้system.webแท็ก) __RequestVerificationToken(เปลี่ยน ตามรหัสด้วยAntiForgeryConfig.CookieNameแต่น่าเสียดายที่ใช้ไม่ได้กับอินพุตที่ซ่อนอยู่ที่ระบบนี้สร้างขึ้นใน html))


18

ที่จริงแล้วโมดูลที่เข้ารหัสและตัวอย่าง Global.asax ที่แสดงด้านบนใช้ได้กับคำขอที่ถูกต้องเท่านั้น

ตัวอย่างเช่นเพิ่ม <ที่ส่วนท้ายของ URL ของคุณและคุณจะได้รับหน้า "คำขอที่ไม่ถูกต้อง" ซึ่งยังคงเปิดเผยส่วนหัวของเซิร์ฟเวอร์ นักพัฒนาจำนวนมากมองข้ามสิ่งนี้

การตั้งค่ารีจิสทรีที่แสดงก็ใช้ไม่ได้เช่นกัน URLScan เป็นวิธีเดียวในการลบส่วนหัว "เซิร์ฟเวอร์" (อย่างน้อยใน IIS 7.5)


มันใช้งานได้สำหรับฉันกับโมดูลที่เข้ารหัส (เพิ่มใน web.config) แม้ในคำขอที่ไม่ดี;) ใน global.asax มันใช้งานไม่ได้จริง ๆ (เช่นไฟล์คงที่เป็นต้น)
kapsiR

หวังว่าคุณจะยังคงเปิดการตรวจสอบคำขออยู่
Dan Ware

1
ใครมีทางเลือกแทน urlscan สำหรับ IIS 8+ บ้าง
herostwist

มีโซลูชันที่ใช้งานได้อย่างน้อยใน IIS10 +: stackoverflow.com/a/53222967/1671558
Ilya Chernomordik

17

หรือเพิ่มใน web.config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-AspNet-Version" />
            <remove name="X-AspNetMvc-Version" />
            <remove name="X-Powered-By" />
            <!-- <remove name="Server" />  this one doesn't work -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

3
วิธีนี้ไม่ได้ลบส่วนหัว "เซิร์ฟเวอร์" คนอื่น ๆ จะถูกลบออก
Pure.Krome

คุณสามารถกำจัด X-Powered-By ในการกำหนดค่าส่วนหัวการตอบกลับในระดับเซิร์ฟเวอร์
Snowburnt

1
ฉันไม่ทราบว่ามีบางกรณีที่วิธีนี้ลบX-AspNet-VersionและX-AspNetMvc-Versionส่วนหัว สิ่งที่ฉันรู้คือวิธีนี้ไม่ได้ผลเสมอไป (ถ้าเคยได้ผล) ดูคำตอบของ @Frederic สำหรับวิธีที่เชื่อถือได้มากขึ้นในการลบออก
TheBlueSky

ตอนนี้มีวิธีใน IIS10 + ในการลบส่วนหัวของเซิร์ฟเวอร์: stackoverflow.com/a/53222946/1671558
Ilya Chernomordik

14

web.configการตั้งค่านี้ใช้งานเพื่อลบส่วนหัวที่ไม่จำเป็นทั้งหมดออกจากการตอบสนอง ASP.NET (อย่างน้อยเริ่มจาก IIS 10):

<!--Removes version headers from response -->
<httpRuntime enableVersionHeader="false" />

<httpProtocol>
  <customHeaders>
    <!--Removes X-Powered-By header from response -->
    <clear />
  </customHeaders>
</httpProtocol>

<security>
  <!--Removes Server header from response-->
  <requestFiltering removeServerHeader ="true" />
</security>

โปรดทราบว่าสิ่งนี้จะซ่อนส่วนหัวทั้งหมดของ "แอปพลิเคชัน" เช่นเดียวกับวิธีการอื่น ๆ ทั้งหมด หากคุณเข้าถึงเพจเริ่มต้นหรือหน้าแสดงข้อผิดพลาดที่สร้างโดย IIS เองหรือ ASP.NET นอกแอปพลิเคชันของคุณกฎเหล่านี้จะไม่ใช้ ดังนั้นควรอยู่ในระดับรูทใน IIS และธรณีประตูอาจปล่อยให้เกิดข้อผิดพลาดในการตอบสนองต่อ IIS เอง

ปล. มีข้อบกพร่องใน IIS 10 ที่ทำให้บางครั้งแสดงส่วนหัวของเซิร์ฟเวอร์แม้ว่าจะมีการกำหนดค่าที่ถูกต้องก็ตาม ตอนนี้ควรได้รับการแก้ไขแล้ว แต่ต้องอัปเดต IIS / Windows


12

นอกเหนือจากคำตอบ URL Rewriteนี่คือ XML ที่สมบูรณ์สำหรับweb.config

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Remove RESPONSE_Server" >
        <match serverVariable="RESPONSE_Server" pattern=".+" />
        <action type="Rewrite" value="Company name" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

การเขียน URL ใหม่


สิ่งนี้จะลบเวอร์ชัน IIS และ ASP ทั้งหมดออกจากแฮ็กเกอร์หรือไม่
aggie

1
การแก้ไขด้านบนทำงานได้อย่างถูกต้องสำหรับหน้าเว็บ แต่สำหรับรูปภาพ / ไอคอนหากเกิดข้อผิดพลาดภายในเซิร์ฟเวอร์ 500 ก็จะแสดงเซิร์ฟเวอร์: Microsoft-IIS / 7.5 แทนค่าคุณช่วยฉันได้ไหม
ravithejag

11

หากต้องการลบServer:ส่วนหัวให้ไปที่Global.asaxค้นหา / สร้างApplication_PreSendRequestHeadersเหตุการณ์และเพิ่มบรรทัดดังนี้ (ขอบคุณBKและบล็อกนี้สิ่งนี้จะไม่ล้มเหลวใน Cassini / local dev):

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    // Remove the "Server" HTTP Header from response
    HttpApplication app = sender as HttpApplication;
    if (null != app && null != app.Request && !app.Request.IsLocal &&
        null != app.Context && null != app.Context.Response)
    {
        NameValueCollection headers = app.Context.Response.Headers;
        if (null != headers)
        {
            headers.Remove("Server");
        }
    }
}

หากคุณต้องการโซลูชันที่สมบูรณ์ในการลบส่วนหัวที่เกี่ยวข้องทั้งหมดบน Azure / IIS7 และยังใช้งานได้กับ Cassini โปรดดูลิงก์นี้ซึ่งแสดงวิธีที่ดีที่สุดในการปิดใช้งานส่วนหัวเหล่านี้โดยไม่ต้องใช้ HttpModules หรือ URLScan


9

หากคุณต้องการเพียงแค่ลบส่วนหัวออกคุณสามารถใช้คำตอบของ lukiffer แบบย่อ:

using System.Web;

namespace Site
{
    public sealed class HideServerHeaderModule : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders +=
            (sender, e) => HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

จากนั้นในWeb.config:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
  </modules>
</system.webServer>

1
สิ่งนี้เหมาะสมที่สุดเนื่องจากทรัพยากรเช่น css / js จะไม่มีส่วนหัวของเซิร์ฟเวอร์พอร์ตจากเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์โดยไม่มีการกำหนดค่าและส่วนหัวการตอบกลับของเซิร์ฟเวอร์จะไม่ว่างเปล่า แต่จะไม่ถูกส่ง
Adam Caviness

ฉันเห็นความคิดเห็นว่า runAllManagedModulesForAllRequests = "true" จะทำให้แอปของคุณทำงานช้าลงและไม่แนะนำ แทนที่จะใช้โมดูล urlrewrite outboundRules เพื่อล้างค่าเซิร์ฟเวอร์สำหรับไฟล์แบบคงที่ britishdeveloper.co.uk/2010/06/…
Juri

5

ลองตั้งค่าHKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeaderรายการรีจิสทรีไปของREG_DWORD1


พบสถานการณ์แปลก ๆ กับเซิร์ฟเวอร์ฟาร์มของเราซึ่งการตั้งค่ารีจิสทรีนี้ดูเหมือนจะเป็นการเปลี่ยนแปลงเดียวที่ใช้ได้กับระบบปฏิบัติการทั้งหมด (W2K8, W2K3) ที่เราใช้สำหรับทั้ง IIS6 และ IIS7
jerhewet

2
น่าผิดหวังนี่ไม่ได้สร้างความแตกต่างใด ๆ สำหรับฉันแม้ว่าจะรีบูตเครื่องเสมือนแล้วก็ตาม เรากำลังเรียกใช้ IIS 7.5 บน Windows Server 2008 R2 Standard "เวอร์ชัน 6.1 (รุ่น 7601: Service Pack 1)" ในทำนองเดียวกันOnPreSendRequestHeadersตัวจัดการเหตุการณ์ของฉัน(ดูด้านบน) จะไม่เริ่มทำงานด้วยเหตุผลบางประการ
Owen Blacker

3
น่าเสียดายที่คีย์รีจิสทรีดูเหมือนจะไม่ทำงานบน IIS 7.5
Andrew Csontos


2

ติดตามคำตอบ eddiegroves'ขึ้นอยู่กับรุ่นของ URLScan คุณแทนอาจจะชอบอยู่ภายใต้RemoveServerHeader=1[options]

ฉันไม่แน่ใจว่ามีการเพิ่มตัวเลือกนี้ใน URLScan เวอร์ชันใด แต่มีให้ใช้งานในเวอร์ชัน 2.5 ขึ้นไป


2

ฉันพบบทความที่อธิบายว่าทำไมเราต้องทำการแก้ไข Registry และใช้เครื่องมือเช่น UrlScan เพื่อตั้งค่าใน IIS อย่างถูกต้อง ผมทำตามนั้นไว้ในเซิร์ฟเวอร์ของเราและการทำงาน: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx หากคุณใช้เฉพาะ UrlScan แต่ไม่ได้ทำการเปลี่ยนแปลงรีจิสทรีในช่วงเวลาที่คุณหยุด World Wide Publishing Service เซิร์ฟเวอร์ของคุณจะส่งคืนการตอบสนอง HTTP ของเซิร์ฟเวอร์จากไฟล์ HTTP.sys นอกจากนี้นี่คือข้อผิดพลาดทั่วไปของการใช้เครื่องมือ UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008


2
กรุณาโพสต์รหัสของคุณใน Stack Overflow ลิงก์สามารถเปลี่ยนแปลงและทำลายได้ดังนั้นการโพสต์โค้ดจึงมีประโยชน์มากขึ้น
Blundering Philosopher

2

ใน IIS 10 เราใช้วิธีแก้ปัญหาที่คล้ายกันกับแนวทางของ Drew นั่นคือ:

using System;
using System.Web;

namespace Common.Web.Modules.Http
{
    /// <summary>
    /// Sets custom headers in all requests (e.g. "Server" header) or simply remove some.
    /// </summary>
    public class CustomHeaderModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        public void Dispose() { }

        /// <summary>
        /// Event handler that implements the desired behavior for the PreSendRequestHeaders event,
        /// that occurs just before ASP.NET sends HTTP headers to the client.
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            //HttpContext.Current.Response.Headers.Remove("Server");
            HttpContext.Current.Response.Headers.Set("Server", "MyServer");
        }
    }
}

และเห็นได้ชัดว่าเพิ่มการอ้างอิงไปยัง dll นั้นในโครงการของคุณและโมดูลใน config (s) ที่คุณต้องการ:

<system.webServer>
    <modules>
      <!--Use http module to remove/customize IIS "Server" header-->
      <add name="CustomHeaderModule" type="Common.Web.Modules.Http.CustomHeaderModule" />
    </modules>
</system.webServer>

หมายเหตุสำคัญ 1: โซลูชันนี้ต้องการชุดแอปพลิเคชันแบบรวม

หมายเหตุสำคัญ 2: การตอบสนองทั้งหมดภายในเว็บแอปจะได้รับผลกระทบจากสิ่งนี้ (รวม css และ js);


1

ฉันได้ค้นคว้าสิ่งนี้แล้วและวิธีการ URLRewrite ทำงานได้ดี ดูเหมือนจะไม่พบสคริปต์การเปลี่ยนแปลงที่ดี ฉันเขียนสิ่งนี้เข้ากันได้กับ PowerShell v2 ขึ้นไปและทดสอบบน IIS 7.5

# Add Allowed Server Variable
    Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"}
# Rule Name
    $ruleName = "Remove Server Response Header"
# Add outbound IIS Rewrite Rule
    Add-WebConfigurationProperty -pspath "iis:\" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing='False'}
#Set Properties of newly created outbound rule 
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "serverVariable" -value "RESPONSE_SERVER"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "pattern" -value ".*"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/action" -name "type" -value "Rewrite"


1

วิธีแก้ปัญหาที่เสนอข้างต้นร่วมกันได้ผลสำหรับฉันโดยมีการเปลี่ยนแปลงต่อไปนี้ ฉันกำลังโพสต์สถานการณ์และวิธีแก้ปัญหาของฉันที่นี่

สำหรับฉันฉันต้องการลบส่วนหัวต่อไปนี้:

  • เซิร์ฟเวอร์
  • X-Powered-By
  • X-AspNet-Version
  • เวอร์ชัน X-AspNetMvc

ฉันเพิ่มสิ่งเหล่านี้ใน global.asax ของฉัน:

<%@ Application Language="C#" %>
<script runat="server">
    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
        Response.Headers.Remove("X-Powered-By");
        Response.Headers.Remove("X-AspNet-Version");
        Response.Headers.Remove("X-AspNetMvc-Version");
    }
</script>

เหตุการณ์ข้างต้นไม่ได้รับการทริกเกอร์ดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้ใน web.config แล้วมันก็ใช้ได้

<modules runAllManagedModulesForAllRequests="true" />

และสำหรับการลบส่วนหัวของเวอร์ชันฉันได้เพิ่มต่อไปนี้ใน web.config:

<httpRuntime enableVersionHeader="false" />

การเปลี่ยนแปลงใน web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
    </system.webServer>
    <system.web>
        <httpRuntime enableVersionHeader="false" />
    </system.web>
</configuration>

หวังว่าจะช่วยได้!


0

ฉันลองทุกอย่างที่นี่และในเธรดสแต็กล้นอื่น ๆ ที่คล้ายกัน

ฉันวางสายไปหน่อยเพราะลืมล้างแคชของเบราว์เซอร์หลังจากทำการเปลี่ยนแปลงการกำหนดค่า หากคุณไม่ทำเช่นนั้นและไฟล์นั้นอยู่ในแคชในเครื่องของคุณไฟล์จะให้บริการกลับมาให้คุณด้วยส่วนหัวเดิม (duh)

ฉันทำให้มันใช้งานได้เป็นส่วนใหญ่โดยการลบ runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true">

สิ่งนี้ได้ลบส่วนหัวที่ไม่เกี่ยวข้องออกจากไฟล์คงที่ส่วนใหญ่แต่ฉันยังคงได้รับส่วนหัว "เซิร์ฟเวอร์" ในไฟล์คงที่บางไฟล์ในโครงการ WebAPI ของฉัน

ในที่สุดผมก็พบและนำไปใช้แก้ปัญหานี้และตอนนี้ทุกส่วนหัวที่ไม่พึงประสงค์ที่หายไป:

https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

ซึ่งกล่าวถึงรหัสของเขาที่นี่:

https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5

นี่คือโมดูล Native-Code มันสามารถที่จะลบส่วนหัวของเซิร์ฟเวอร์ไม่ใช่แค่ค่าว่างเปล่า โดยค่าเริ่มต้นจะลบ:

  • เซิร์ฟเวอร์
  • X-Powered-By
  • X-Aspnet-Version
  • เซิร์ฟเวอร์: Microsoft-HTTPAPI / 2.0 - ซึ่งจะถูกส่งคืนหาก "ส่งคำขอไปยัง IIS ไม่สำเร็จ"

-1

IIS 7.5 และเวอร์ชันที่ใหม่กว่าอาจมีข้อความส่วนหัวเก็บไว้ใน iiscore.dll

ใช้ตัวแก้ไขฐานสิบหกค้นหาสตริงและคำว่า "เซิร์ฟเวอร์" ต่อ53 65 72 76 65 72จากนั้นและแทนที่ด้วย null ไบต์ ใน IIS 7.5 มีลักษณะดังนี้:

4D 69 63 72 6F 73 6F 66 74 2D 49 49 53 2F 37 2E 35 00 00 00 53 65 72 76 65 72 

ซึ่งแตกต่างจากวิธีการอื่น ๆ ซึ่งจะไม่ส่งผลให้เกิดโทษต่อประสิทธิภาพ ส่วนหัวยังถูกลบออกจากคำขอทั้งหมดแม้กระทั่งข้อผิดพลาดภายใน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.