IIS6でホストされている ASP.NET 3.5 Web サイトのセキュリティ対策として、常にビューステート暗号化を有効にしようとしています。ビューステートをオフにしましたが、この文字列にはまだ「controlstate」が表示されています。テスト環境では、web.config で以下を設定するだけで、ビューステートを base64 でデコードして半プレーンテキストにすることはできなくなりました。
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
次のコード (マシン キー ジェネレーターによって生成) を machine.config に追加しましたが、テスト サーバーでビューステートを正常に暗号化しています。
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
私の非テスト環境は、上記の設定で常にビューステートをプレーンテキストに base64 デコードできるため、上記の変更を反映していないようです。変更を加えた後は常にiisresetします。
私の非テスト Web サーバーに関する情報:
- Web ファーム/負荷分散 (ただし、現在テスト用に使用できるサーバーは 1 つだけです)
- Sql セッション状態 (これを設定するには、machine.config の machinekey が最初に必要でした)
- machine.config: 展開の小売 = "true"
asp.net ビューステートの暗号化を妨げる可能性のある追加の設定を探す場所を誰か提案できますか?
編集:現在、私のiisテストサーバーでは、viewStateEncryptionMode設定を「Never」に設定してもビューステートを暗号化しているため、設定を元に戻すことはできず、他のWebサイトはこの設定を保持していないようです。このプロパティがオーバーライドされている場所をどこで確認できますか? iisreset/stop www service/touch machine.config のときに実行されること以外に、クリアする必要があるこの設定が保存されているキャッシュはありますか?
EDIT FINAL:設定ファイルを何日も勉強した後、私はあきらめて、コードを介してこれを実装しました。ページ イベントにアタッチするセキュリティ モジュールを既に持っていたので、Page_Load に追加しました: Page.RegisterRequiresViewStateEncryption();
この設定がすぐに IIS6 に反映されない理由を知りたいです。ページノードを介してviewStateEncryptionModeを「Always」に設定すると、cassiniをローカルで実行すると、ビューステートがエンコードされ、id="__VIEWSTATEENCRYPTED"で追加の隠しフィールドがレンダリングされることがすぐにわかります。次に「Never」に設定すると、すぐに暗号化がオフになります。IIS6 でホストされている Web サイトの Web サイトにまったく同じ変更を加えても、すぐには効果がありませんが、設定をそのままにしておくと、最終的には有効になります。www サービスを停止/開始し、iis をリセットし、ASPNET 一時キャッシュをクリアしますが、実行しません。他に何を試すべきかわかりませんか?願わくば、この投稿がしばらくの間 ROT になり、将来誰かが私が経験したのと同じ動作を見て、これをさらに理解できるようになることを願っています!