[解決済み] [Solved] ASP.NET MS11-100: 投稿されたフォームの値の最大数の制限を変更するにはどうしたらいいですか?
質問内容
マイクロソフトは最近(2011年12月29日)、.NET Frameworkのいくつかの深刻なセキュリティ脆弱性に対処するための更新プログラムをリリースしました。 このアップデートで導入された修正の1つは MS11-100 ハッシュテーブルの衝突を伴うDoS攻撃の可能性を一時的に緩和しています。 この修正により、多くの POST データを含むページが壊れるようです。 私たちの場合は、非常に大きなチェックボックスリストを持つページで発生します。 なぜこのようなことが起こるのでしょうか?
いくつかの非公式な情報源は、MS11-100がpostbackアイテムに500という制限を設けていることを示しているようです。 これを確認するマイクロソフトのソースは見当たりません。 ビューステートと他のフレームワークの機能がこの制限の一部を食いつぶしていることは知っています。 この新しい制限を制御するコンフィギュレーション設定はあるのでしょうか? チェックボックスの使用から切り替えることもできますが、私たちの特定の状況にはむしろうまく機能しています。 また、このパッチは他の厄介なものから保護してくれるので、適用したいと思います。
<ブロッククオートこの速報は、DOS 攻撃のベクトルを修正するため、DOS の制限を提供します。 1つのHTTP POSTで送信可能な変数の数 リクエストに対応します。デフォルトの上限は500で、これは通常の ウェブアプリケーションで、この攻撃を無効にするにはまだ十分な低さです。 ドイツのセキュリティ研究者が述べています。
EDIT: 制限値(500ではなく1000のようです)の例を記載したソースコード 標準的なMVCアプリを作成し、メインのインデックスビューに以下のコードを追加します。
@using (Html.BeginForm())
{
<fieldset class="fields">
<p class="submit">
<input type="submit" value="Submit" />
</p>
@for (var i = 0; i < 1000; i++)
{
<div> @Html.CheckBox("cb" + i.ToString(), true) </div>
}
</fieldset>
}
このコードはパッチ適用前に動作していました。 パッチを当てた後は動作しません。 エラーは
[InvalidOperationException: 現在の操作により、操作は無効です。 の状態です]。
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +82 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +111
System.Web.HttpRequest.FillInFormCollection() +307
どのように解決するのですか?
web.configにこの設定を追加してみてください。.NET 4.0のASP.NET MVC 2プロジェクトでテストしたところ、この設定によってコードがスローされなくなりました。
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1001" />
</appSettings>
これで(セキュリティアップデートを適用した後)制限を変更することができるはずです。
まだマシンをアップデートしていなかったので、Reflectorを使ってHttpValueCollectionクラスを確認したところ、そのクラスには
ThrowIfMaxHttpCollectionKeysExceeded
メソッドを使用します。
インストールした KB2656351 (.NET 4.0 の更新) を行い、Reflector でアセンブリを再読み込みしたところ、メソッドが表示されました。
だから、その方法は間違いなく新しいものです。私が使ったのは ディスアセンブル というオプションがあり、コードからわかることは、AppSettingをチェックしていることです。
if (this.Count >= AppSettings.MaxHttpCollectionKeys)
{
throw new InvalidOperationException();
}
web.config ファイルにこの値がない場合は
System.Web.Util.AppSettings.EnsureSettingsLoaded
(内部の静的クラス)。
_maxHttpCollectionKeys = 0x3e8;
また、Alexey Gusarovは2日前にこの設定についてツイートしています。
- http://twitter.com/#!/tr_tr_mitya/status/152473667102715904
- http://twitter.com/#!/tr_tr_mitya/status/152475158941138944
そして こちら は、Jonathan Ness (Security Development Manager, MSRC) と Pete Voss (Sr. Response Communications Manager, Trustworthy Computing) との Q&A による正式な回答です。
<ブロッククオートQ: AppSettings.MaxHttpCollectionKeysは、新しいパラメータですか? には、フォームエントリの最大数が含まれていますか?
A: はい、そうです。
関連
-
pythonでpillowをインストールする3つの方法
-
403 - アクセス拒否。IIS7 でファイルを開くと、アクセス拒否されます。
-
ASP.NETでのRadioButton(ラジオボタン)の使用について
-
ConfigurationManagerのGetSection()メソッドです。
-
[解決済み] データをリクエストペイロードではなく、フォームデータとして投稿するにはどうすればよいですか?
-
[解決済み】ASP.NET MVCでWebアプリのベースURLを取得するにはどうすればよいですか?
-
[解決済み] ASP.NETの新しいセキュリティ脆弱性の深刻度と回避方法について教えてください。
-
[解決済み] Razorとインラインコードブロックによるif文の使用方法
-
[解決済み] Asp.Net 4でValidateRequest="false "が動作しない。
-
[解決済み] Razor _layout.cshtml のファイル名の先頭にアンダースコアがあるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NETガベージコレクション GC診断ツール dotnet-gcmon 使用方法
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
[解決済み] aspnet:MaxHttpCollectionKeys の最大値。
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] web.configでmaxJsonLengthの長さを無制限に設定することは可能ですか?
-
[解決済み] ASP.NETでConsole.WriteLineはどこに行くのですか?
-
[解決済み] ポストバック時に「オブジェクトの現在の状態により操作が有効でない」エラーが発生する
-
[解決済み] ASP.Net MVCとWebフォームを比較する最大のメリット
-
[解決済み] .Netが間違った参照アセンブリのバージョンを選択する