5

OutputCacheパラメーターを多用しているASP.NETMVC2サイトを構築しています。ただし、懸念があります。このようなキャッシュを使用すると、認証が妨げられる可能性があります。

すべてのページに、ユーザーがログインしているかどうかを表示します。さらに、一部のビューでは、ユーザーの役割に基づいてフィルタリングを行い、一部のページコンテンツを表示するかどうかを決定します(たとえば、いずれかのページの[編集]リンクは、モデレーターまたは管理者の役割のユーザーにのみ表示されます) 。

OutputCacheを使用すると、ビューのこの動的な変更が妨げられますか?もしそうなら、どうすればキャッシュを排除せずにこの問題を解決できますか?

4

2 に答える 2

8

[OutputCache] 属性と [Authorize] 属性は互いにうまく機能します。AuthorizeAttribute.OnAuthorization() メソッドは、出力キャッシュ システムにフックを設定し、ページがキャッシュから提供される前に承認フィルターを強制的に再実行します。認可フィルターのロジックが失敗した場合、キャッシュミスとして扱われます。認証ロジックが成功すると、ページはキャッシュから提供されます。そのため、アクションに [Authorize(Roles = "Moderator, Administrator")] と [OutputCache] がある場合、現在のユーザーがモデレーターまたは管理者の役割でない限り、ページはキャッシュから提供されません。

これ、ユーザーまたは役割によって異なることに注意してください。文字通り、元のチェックを再実行しています。ユーザー A (モデレーター) が入ってきて、ページがキャッシュされるとします。ここで、ユーザー B (管理者) が入ってきて、キャッシュされたページにアクセスします。管理者とモデレーターの両方が許可されているため、[承認] チェックは成功し、ユーザー B に提供される応答には、ユーザー A に提供された応答とまったく同じ内容が含まれます。

応答置換は MVC 2 では機能しないことに注意してください。潜在的に機密性の高いデータを提供している場合、ここでの最善の策はそれをキャッシュしないことです。絶対にキャッシュする必要がある場合は、AJAX コールバックを使用して不足しているデータを動的に埋めることで、応答置換に似たものを模倣できます。

于 2010-08-09T21:47:25.673 に答える
1

必要なのはASP.NETドンントキャッシングだと思います。良い説明については、ここを参照してください。SOがトップバーエリアにこのようなものを使用しても、私は驚かないでしょう。

于 2010-08-09T21:16:27.630 に答える