IISには悪意がある入力を事前に禁止するための機能が存在します。しかし、正常な仕様の使い方であってもしばしば入力を遮断してしまい、問題を引き起こします。
これを禁止するには@PageディレクティブにValidateRequest="false"などを追加していました。
しかし、IIS 7.5では(もうちょっと前からかもしれない)、これでもバリデーション機能が禁止されません。つまり、既に禁止許可を明示的に指定してあっても、OSをアップグレードするだけで動作が非互換になります。
原因 §
安全を確認してわざわざ許可しているのに考えにくいことですが、セキュリティの締め付けが厳しくなって、許可しているのに許可されない状態で動くようになっています。従って、@Page、web.config、machine.configのレベルで許可しても制限されてしまいます。
対策 §
Web.config等に以下を入れるとバリデーションを禁止できるようになります。(バリデーション禁止が許可されるのであって、これで禁止されるわけではない)
- <httpRuntime requestValidationMode="2.0" />
感想 §
もともと正規の入力を弾いて迷惑すぎる機能だったのに、更に迷惑がパワーアップしている感じですね。しかも、たまたまそのシーケンスが含まれる入力を行うまでうっかりすると気づかないので、更に迷惑大。今回も、やっとできあがったとホッとした直後にそのシーケンスの入力に当たって、大迷惑。