6

現在、ASP.net Web サイト アプリケーションのセキュリティの問題を修正しています。

問題の 1 つは、ViewState暗号化されていないことでした。

そのため、viewState を暗号化する方法について StackOverFlow などで確認し、 Web.config で<pages viewStateEncryptionMode="Always" />このような 3DES マシンキーを使用して追加しました<machineKey validation="3DES" />

"EnableViewStateMAC=true"も強制的に必要かどうかを知りたいですか?これは、私がオンラインで見つけた提案された解決策のいくつかで言及されていたからです。しかし、私のチェックでは、これがなくても暗号化が機能していることがわかりました。

[注: 個々のページを変更することは、このアプリケーションの実用的なソリューションではないため、アプリケーション レベル (Web.config) でこれらの変更を行う必要がありました。]

4

4 に答える 4

20

暗号化が有効になっている場合でも、EnableViewStateMacをfalseに設定しないでください。MACは、クライアントがViewStateの内容を悪意を持って改ざんできないことを保証します。(これを保証するには、暗号化だけでは不十分です。MACが必要です。)

EnableViewStateMacプロパティは、「false」に設定する正当な理由がないため、製品の将来のバージョンで削除される予定です。

于 2013-01-08T07:28:18.947 に答える
5

念のため:

ASP.NET 4.5.2 以降、ランタイムは EnableViewStateMac = true を適用します。

詳細はこちら: ASP.NET 4.5.2 および EnableViewStateMac

于 2014-05-08T10:01:14.747 に答える
1

2014 年 9 月現在、

ASP.NET ランタイム 1.1 ~ 4.5.2 のすべてのバージョンで設定が禁止されるようになりました

<%@ Page EnableViewStateMac="false" %>

<pages enableViewStateMac="false" />

http://blogs.msdn.com/b/webdev/archive/2014/09/09/farewell-enableviewstatemac.aspx

于 2014-09-12T10:52:27.850 に答える
0

マルチサーバーをホストする場合に問題になります。マシン キーが異なるためです。

プロジェクトが単一のマシンで実行されている場合。EnableViewStateMAC=true は安全です。

enableViewStateMac を使用するには、連続する要求を同じサーバーに転送する必要があります (つまり、サーバー アフィニティ)。この機能は、ページのビュー ステートの改ざんを防止するために使用されます。ただし、これは現在のサーバーで自動生成された検証キーに基づいて行われます。このキーからメッセージ認証コード (MAC) が生成され、ViewState でブラウザーに返されます。問題は、POST バックが実行されて別のサーバーに移動すると、「Corrupt View State」という小さなエラー メッセージが表示されることです。

これを修正するには、要素で enableViewStateMac を false に設定するか、(ファーム内の) すべてのサーバーで要素の validationKey 属性に共通の値を指定します。

ちなみに、ドキュメントによると、これはデフォルトでオフになっています。それは間違っています!machine.config を確認してください。

于 2012-12-27T10:28:54.923 に答える