19

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 になり、将来誰かが私が経験したのと同じ動作を見て、これをさらに理解できるようになることを願っています!

4

3 に答える 3

2

これを投稿してからしばらく時間が経っていることは承知していますが、PageStatePersister の独自の実装を検討したことはありますか? PageStatePersister は、ページに埋め込まれた ViewState および ControlState データのフォーマットを担当するコンポーネントです。セキュリティが主な関心事である場合は、データの機密性を確保するために任意の暗号化アルゴリズムを使用できます。構成に基づいて、かなり有能な環境にいるように聞こえるので、最初に明らかに負荷テストを行ってください。また、「従来の」ASP.NET WebForms サイトに組み込まれた場合の ViewState への MVC の層状の関与について、私は何も知らない、または経験していないことにも言及する価値があります。

幸運を。

B

于 2011-08-05T12:04:00.797 に答える
1

Web.config ページの設定は、更新可能なオプションが無効になっているコンパイル済みの ASP.Net アプリケーションには適用されません。しばらく経ちましたが、私のテストサーバーは、更新可能なオプションを無効にして展開した可能性があります...教訓。

MSDNを参照

私が尋ねた同様の質問、同じ問題。

于 2012-12-22T20:02:54.173 に答える
0

私の推測では、負荷分散された Web ファームが混乱の原因です。「現在、テスト用に稼働しているのは1台のサーバーのみ」と述べましたが、発生しているすべての症状は、Webファームで複数のサーバーが実行されている場合に発生するものとまったく同じように聞こえますが、web.configのみを作成しましたおよび machine.config が 1 つのサーバーで変更されます。ブラウザで Web サイトにアクセスすると、ある方法で構成された 1 つのサーバーにアクセスすることもあれば、別の方法で構成された別のサーバーにアクセスすることもありました。

于 2011-08-05T16:27:29.637 に答える