ASP.NET が認識できる User-Agent の長さが 512 文字に拡張されました


こんにちは 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


Comments (4)
  1. 春告 より:

    ASP.NET 2.0のKB962204の表示アドレスは正常ですが、

    リンクアドレスがKB974762になっています。

    ちなみに、ASP.NET 4.0においても、User-Agentの最大文字列長

    は、512なのでしょうか?

  2. 春告 より:

    ASP.NET 1.1でのWeb.configでの回避策にて、

     User-Agent が 2156文字 以上の場合は IE6 であるとみなす

    とありますが、

     2156???

    256ですよね?

    前後の内容から、分かり切ったことですが、一応…

  3. d99 より:

    春告さん

    ご指摘ありがとうございます。修正しました。なお、ASP.NET 4.0 については念のため確認してからコメントにてお返事しますね。

  4. d99 より:

    春告さん

    ASP.NET 4.0 (VS2010 RC 同梱の System.Web.dll バージョン 4.0.30128.1)についても、認識できる最大長は 512文字 である事を確認しました。512文字を超えた場合は、512文字の部分文字列が使用されます。

Comments are closed.

Skip to main content