Microsoftは最近(2011年12月29日)、. NET Frameworkのいくつかの深刻なセキュリティ脆弱性に対処するためのアップデートをリリースしました。MS11-100で導入された修正の1つは、ハッシュテーブルの衝突を含む潜在的なDoS攻撃を一時的に軽減します。この修正により、大量のPOSTデータを含むページが破損するようです。私たちの場合、非常に大きなチェックリストのあるページで。なぜこれが当てはまるのでしょうか?
一部の非公式ソースは、MS11-100がポストバックアイテムに500の制限を設定していることを示しているようです。これを確認するマイクロソフトの情報源が見つかりません。ビューステートと他のフレームワーク機能がこの制限の一部を使い果たしていることを知っています。この新しい制限を制御する構成設定はありますか?チェックボックスの使用から切り替えることもできますが、特定の状況ではかなりうまく機能します。パッチは他の厄介なものから保護するため、パッチを適用したいと思います。
このセキュリティ情報は、単一のHTTP POSTリクエストに対して送信できる変数の数に制限を設けることにより、DOS攻撃ベクトルを修正しています。デフォルトの制限は500ですが、これは通常のWebアプリケーションには十分ですが、ドイツのセキュリティ研究者が説明しているように攻撃を無効にするのに十分なほど低くなっています。
編集:制限の例を含むソースコード(500ではなく1,000のように見えます)標準の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