こんにちわ d99 です。
今回は、最近リリースされた ASP.NET の修正モジュールについて解説をさせて頂きます。

ASP.NET (1.1 および 2.0) では、セキュリティ上の理由から、認識できる User-Agent の長さが 256文字 に制限されていました。これを 最大512文字 に拡張する修正モジュールがリリースされています。

ASP.NET 1.1

ASP.NET 1.1 では 256文字 を超える User-Agent を受け取った場合、Request.Browser.Borwser が "Unknown" となっていました。これによって、ASP.NET は最低レベルのブラウザに対応したレンダリングを行います。例えば、javaScript が無効なブラウザだと判断される事で Validation コントロールのクライアントサイド検証用のスクリプトが出力されなくなる、といった現象が発生します。

この現象を再現させる手順は以下の通りです。

  1. 以下の内容を “test.aspx” として保存します。

    UA:<% = Request.UserAgent %><BR>
    Browser:<% = Request.Browser.Browser %><BR>
    <form id="Form1" runat="server">
    <asp:TextBox id="TextBox1" runat="server" ForeColor="Lime" BackColor=”Red”></asp:TextBox>
    </form>
     
  2. 以下の値をクライアントマシンのレジストリキーに追加し、User-Agent が 256文字 を超えるよう設定します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform
    Test        REG_SZ               (長い文字列、例えば 0123456789012345…… といった内容を設定します)
     
  3. test.aspx にアクセスすると、Request.Browser.Browser が “Unkown” となっている事や、テキストボックスの ForeColoer と BackColor が失われている(レンダリングされていない)事がご確認いただけます。

    この現象に対する修正のサポート技術情報はこちらです。

    FIX: You cannot browse an ASP.NET 1.1 Web site if the User-Agent string that is in the browser contains more than 256 characters
    http://support.microsoft.com/kb/974762/en-us

    この修正は、System.Web.dll のバージョンが 1.1.4322.2456 以上の場合には含まれています。入手については、お手数ですがマイクロソフトサポートサービスまでお問い合わせ下さい。また、この修正モジュールを適用するためには、.NET Framework 1.1 SP1 もしくは Windows Server 2003 SP2 の事前適用が必要となります。

    なお、この現象は、以下の内容を web.config に加える事で回避可能です。ただし、この回避策は 「User-Agent が 256文字 以上の場合は IE6 であるとみなす」 という設定になりますのでご注意ください。

    <browserCaps>
    <filter>
           <case match="^$">
                  browser=IE
                  version=6.0
                  majorversion=6
                  minorversion=0
                  win32=true
                  platform=WinXP
                  frames=true
                  tables=true
                  cookies=true
                  backgroundsounds=true
                  vbscript=true
                  javascript=true
                  javaapplets=true
                  activexcontrols=true
                  tagwriter=System.Web.UI.HtmlTextWriter
                  ecmascriptversion=1.2
                  msdomversion=6.0
                  w3cdomversion=1.0
                  css1=true
                  css2=true
                  xml=true
                  isMobileDevice="false"
           </case>
    </filter>
    </browserCaps>

    ASP.NET 2.0

    ASP.NET 2.0 では、256文字 を超える User-Agent を受け取った場合、256文字 までの部分文字列を使用する動作となっていました。ASP.NET 1.1 とは異なり、最低レベルのレンダリングがされる事はありませんが、切り捨てられる箇所によっては例外が発生する場合があります。

    この現象を再現させる手順は以下の通りです。

    1. 以下の内容を “test.aspx” として保存します。

      UA:<% = Request.UserAgent %><BR>
      ClrVer:<% = Request.Browser.ClrVersion %>
       
    2. Fiddler などのツールを使用し、以下の User-Agent で test.aspx にアクセスします。

      Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729;)
       
      ※ 上記の場合、ASP.NET は “Mozilla/4.0 …. .NET CLR 3” という部分文字列を使用します。この “.NET CLR 3” から ASP.NET が ClrVersion を読み取る事が出来ません。
       
    3. 以下の例外が発生する事がご確認いただけます。。

      ArgumentException: バージョン文字列の部分が短すぎるか、または長すぎます。
        System.Version..ctor(String version) + 7477288
         System.Web.Configuration.HttpCapabilitiesBase.GetClrVersions() +376
          System.Web.Configuration.HttpCapabilitiesBase.get_ClrVersion() +7

    この現象に対する修正のサポート技術情報はこちらです。

    FIX: You may not successfully browse an ASP.NET Web site if the User-Agent string contains more than 256 characters
    http://support.microsoft.com/kb/962204/en-us

    この修正は、Windows 2000、XP、2003 では System.Web.dll のバージョンが 2.0.50727.4028 以上、Windows Vista、7、2008 では 2.0.50727.4013 以上の場合には含まれています。入手については、下記 URL からダウンロード頂けます。

    For Windows 2000, XP, 2003
    http://code.msdn.microsoft.com/KB969612

    for Windows Vista, 7, 2008
    http://code.msdn.microsoft.com/KB967535

    なお、残念ながら 2.0 の場合は、修正適用以外に回避策はありません。また、このモジュールの適用のためには .NET Framework 2.0 SP2 の事前適用が必要となります。

    特に ASP.NET 1.1 では、エラーが発生せず、画面構成がおかしくなるといった現象がクライアントに出るだけなので、現象発生に気づきにくいかもしれません。もしお心当たりの点や不明点等がございましたら、是非サポートサービスまでご連絡ください。

    ではまた。
    d99 でした。

     

     追記:ご指摘頂いた間違いを修正しました。なお、本件については、英語版を Microsoft U.K. の Doug Stewart の blog にもゲストポストさせて貰いました。ありがとう!、Doug

    ASP.NET User-Agent limitation expanded from 256 to 512 characters
    http://blogs.msdn.com/dougste/archive/2010/02/16/asp-net-user-agent-limitation-expanded-from-256-to-512-characters.aspx