2012-06-22 48 views
12

Tôi cần phải che giấu một số tiêu đề được tạo bởi ASP.NET và IIS và được trả về trong các phản hồi từ dịch vụ ASP.NET WebAPI. Các tiêu đề tôi cần để cloak là:Xóa tiêu đề khỏi phản hồi

  • server
  • X-ASPNET-Version
  • X-AspNetMvc-Version
  • X-Powered-By

Dịch vụ này được sớm tổ chức trong WCF, và kỹ thuật che giấu được thực hiện trong một HttpModule bằng cách đăng ký PreSendRequestHeaders và thao tác HttpContext.Current.Response.Headers. Với ASP.NET WebAPI tất cả mọi thứ bây giờ là nhiệm vụ dựa, vì vậy HttpContext.Current là null. Tôi đã cố gắng để chèn một trình xử lý tin nhắn và điều khiển HttpResponseMessage trả về, nhưng các tiêu đề không xuất hiện trên sân khấu đó. X-Powered-By có thể được gỡ bỏ trong các thiết lập IIS, nhưng cách đề xuất để loại bỏ phần còn lại của chúng là gì?

Trả lời

10

Vấn đề là mỗi người được thêm vào tại một điểm khác nhau:

  • Server: bổ sung bởi IIS. Không chính xác chắc chắn nếu nó có thể được tắt mặc dù bạn dường như đã được loại bỏ nó bằng cách sử dụng HttpModule.
  • X-AspNet-Version: bổ sung bởi System.Web.dll tại thời điểm Flush trong HttpResponse lớp
  • X-AspNetMvc-Version: Được thêm bởi MvcHandler trong System.Web.dll. Nó có thể được ghi đè để cái này nên được OK.
  • X-Powered-By bởi IIS nhưng có thể bị tắt như bạn đã nói.

Tôi nghĩ rằng đặt cược tốt nhất của bạn vẫn đang sử dụng HttpModules.

+1

Bạn đã đúng. Tôi đã có thể loại bỏ tất cả (bao gồm cả Server) trong HttpModule. Vấn đề duy nhất là làm thế nào tôi có một tham chiếu đến HttpContext: HttpContext.Current trả về null, nhưng HttpApplication.Context trên thể hiện HttpApplication được truyền cho HttpModule trả về một cá thể hợp lệ. –

1

Nếu bạn đang sử dụng IIS7/Azure sau đó có một cái nhìn lúc này:

Removing/Hiding/Disabling excessive HTTP response headers in Azure/IIS7 without UrlScan

Nó cho thấy cách tốt nhất để vô hiệu hóa các tiêu đề mà không sử dụng HttpModules.

+0

Câu hỏi đặt ra là loại bỏ bởi một HttpModule tùy chỉnh, không phải về cách loại bỏ nó. Tôi cũng phải đối mặt với vấn đề này và vẫn không biết cách loại bỏ nó. Sử dụng UrlScan mất nhiều thời gian hơn và nó không hoạt động trên Windows Server 2012. –

9

Đối với lợi ích của những người đất ở đây thông qua một tìm kiếm google/bing :: Dưới đây là tóm tắt các bước sau:

Bước 1: Tạo một lớp dẫn xuất từ ​​IHttpModule (và IDisposable để dọn dẹp khi chúng tôi đang thực hiện):

public class MyCustomModule : IHttpModule, IDisposable 
    { 
     private HttpApplication _httpApplication 
private static readonly List<string> HeadersToCloak = new List<string> 
      { 
       "Server", 
       "X-AspNet-Version", 
       "X-AspNetMvc-Version", 
       "X-Powered-By" 
      }; 
    .. 
    } 

Bước 2: Nhận một tham chiếu đến bối cảnh nội tại trong phương pháp IHttpModule.Init, và gán một event handler cho sự kiện PreSendRequestHeaders:

public void Init(HttpApplication context) 
     { 
      _httpApplication = context; 

      context.PreSendRequestHeaders += OnPreSendRequestHeaders; 
     } 

Bước 3: Bây giờ các tiêu đề có thể được gỡ bỏ như vậy:

private void OnPreSendRequestHeaders(object sender, EventArgs e) 
     { 
      if (null == _httpApplication) 
      { 
       return; 
      } 

      if (_httpApplication.Context != null) 
      { 
       var response = _httpApplication.Response; 
       HeadersToCloak.ForEach(header => response.Headers.Remove(header)); 
      } 
     } 

Bước 4: Bây giờ đăng ký mô-đun này trong web.config gốc của bạn dưới system.webServer (nếu đang chạy IIS 7.0 chế độ tích hợp chi tiết hơn tại đây):

<configuration> 
    <system.webServer> 
    <modules> 
     <add name="MyCustomModule" type="<namespace>.MyCustomModule "/> 
    </modules> 
    </system.webServer> 
</configuration> 

Hy vọng điều này sẽ hữu ích!

+0

Điều này không thực sự loại bỏ tiêu đề 'X-Powered-By'. Ít nhất không phải trong IIS 7. –

+0

@ Ek0nomik Nếu bạn có quyền truy cập vào giao diện điều khiển IIS, hãy kiểm tra HttpReponseHeaders (nhấp đúp vào biểu tượng) và loại bỏ tiêu đề X-Powered-By từ đó. Tôi cũng đã có kinh nghiệm rằng nếu một tiêu đề phản ứng được thêm vào từ IIS, nó không được gỡ bỏ bởi HttpModule - nó xuất hiện như là tiêu đề từ IIS được thêm vào sau này trong đường ống. – dotnetguy

Các vấn đề liên quan