Microsoftは最近(2011年12月29日)、.NETFrameworkのいくつかの重大なセキュリティの脆弱性に対処するための更新プログラムをリリースしました。MS11-100によって導入された修正の1つは、ハッシュテーブルの衝突を含む潜在的なDoS攻撃を一時的に軽減します。この修正により、多くのPOSTデータを含むページが破損するようです。私たちの場合、非常に大きなチェックボックスリストがあるページ。なぜそうなるのでしょうか?
一部の非公式の情報源は、MS11-100がポストバックアイテムに500の制限を課していることを示しているようです。これを確認するMicrosoftのソースが見つかりません。ビューステートやその他のフレームワーク機能がこの制限の一部を使い果たしていることを私は知っています。この新しい制限を制御する構成設定はありますか?チェックボックスの使用を切り替えることもできますが、特定の状況ではかなりうまく機能します。また、他の厄介なものから保護するため、パッチを適用したいと思います。
このセキュリティ情報は、単一の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)+111System.Web
。 HttpRequest.FillInFormCollection()+307