zoukankan      html  css  js  c++  java
  • ASP.NET MVCでResponse Headerのサーバーバージョンをどうやって隠しますか?

    本来是发布在客户的Wiki上的,所以用日语写。

    -----------------------------------------------------------------------------

    Response Headerの中に、サーバーのバージョンがデフォルトで表示されていますが、バージョン情報にて既知の脆弱性を突いた攻撃を受ける可能性が高くて、不安全です。

    ASP.NETの場合、同じくResponse Headerにデフォルトで入っているASP.NETバージョンを隠すには、WebRoleのWeb.configファイルで配置していいですが、サーバーバージョンがそう簡単にWeb.configファイルで配置して済めないです。

    ネットで検索された方法を試します。
    WebRoleの「Global.asax.cs」ファイルで、以下のコードを追加します。

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

    正しいのURLでアクセスしてみれば、Response Headerにサーバーのバージョンがなくなりました。
    成功らしいです!!!

    但し、例えば下記のような存在しないリソースをアクセスすると、
    http://domain/test.text
    404エラー画面が表示され、Response Headerにサーバーのバージョンがまた表示されています。

    それは、MVCの場合、サーバーがRequestを受けて、まずRoutesで設定しているURLに一致するかどうかをチェックして、正しいであれば、Application_PreSendRequestHeaders() を実行します。なので、正しいではないURLの場合、Application_PreSendRequestHeadersを実行しないため、ヘッダからServerのバージョンを削除しないです。

    そのため、URLをRoutesにマッピングする前に、ヘッダからServerのバージョンを削除しければなりません。
    以下のコードを追加してみます。
    「Web.config」

    <system.webServer>
        <modules>
          <add name="CustomHeaderModule" 
           type="Test.Module.CustomHeaderModule" />
        </modules>
     </system.webServer>
    

     「CustomHeaderModule.cs」

    namespace Test.Module
    {
        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.Remove("Server");
            }
        }
    }

    こうすれば、URLが正しくなくても、Serverのバージョンが削除されます。

  • 相关阅读:
    带有“全选”的combotree
    combotree(组合树)的使用
    根据权限显示accordion
    accordion(折叠面板)的使用
    js中substr、substring、indexOf、lastIndexOf的用法
    EasyUI中使用自定义的icon图标
    EasyUI tree的三种选中状态
    C# List集合去重使用lambda表达式
    C# DataTable去重,根据列名去重保留其他列
    win10下部署.Net Web项目到IIS10
  • 原文地址:https://www.cnblogs.com/nonkicat/p/3317454.html
Copyright © 2011-2022 走看看