エラーの内容は以下の通りです。
スタックトレースの内容は以下の通りです。
[InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。] System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2727926 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +61 System.Web.HttpRequest.FillInFormCollection() +148 [HttpException (0x80004005): URL にエンコードされたフォーム データが有効ではありません。] System.Web.HttpRequest.FillInFormCollection() +206 System.Web.HttpRequest.get_Form() +68 GeneXus.Http.HttpAjaxContext.LoadFormVars(HttpContext localHttpContext) +107 GeneXus.Http.GXHttpHandler.InitPrivates() +153 GeneXus.Http.GXHttpHandler.ProcessRequest(HttpContext httpContext) +157 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 |
色々調べた所、Microsoft セキュリティ更新プログラム MS11-100が原因でした。これは、ASP.NETに対するサービス拒否攻撃に関する脆弱性対処だそうです。
簡単に言ってしまうと、サーバーにPOSTするデータの数が1000までに制限されています。今回のケースではトランザクションのWebFormに配置してある項目属性の数が多かったためでした。(1000=項目数ではありません。GeneXusが裏側で制御に使っているデータ等も含めての数だと思われます)
対処としては
- 画面上の項目数を減らす
- Web.configに下記の設定を追加し、制限数を増やす
<appSettings> <add key="aspnet:MaxHttpCollectionKeys" value="1000" /> </appSettings> |
但し、(2)に関しては、そもそもの発端が脆弱性に関する対処ですので、制限数を増やしてしまってはセキュリティレベルが下がります。
Webアプリケーションが外部に公開しているものであれば、選択肢は(1)になります。
逆に、社内で利用しているクローズドネットワーク上に配置しているのであれば、(2)もありだと思います。
(それでも社内クライアントが何らかのウイルスに感染して社内サーバーを攻撃し始めた時は防御出来ませんので、そのあたりのセキュリティポリシーを確認の上、対処を決めて下さい。)
0 件のコメント:
コメントを投稿