1

MVC3 Web アプリでフォーム認証を使用しています。ルート web.config に以下を追加しました。

<authentication mode="Forms">
    <forms name=".FormsAuth" loginUrl="~/Home/Index" timeout="2880" />            
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

アプリを起動すると、http://localhost:22888/Home/Index?ReturnUrl=%2f代わりににリダイレクトされますhttp://localhost:22888。行を削除すると<deny users="?">、正しくリダイレ​​クトされますがContext.User.Identity.Name、ログイン後に値が得られません。

助けてください。

4

4 に答える 4

4

ASP.NET MVC 4 アプリのセキュリティ保護と新しい AllowAnonymous 属性をご覧ください。

MVC アプリケーション (任意のバージョン) を保護するためにルーティングまたは web.config ファイルを使用することはできません。MVC アプリケーションを保護するためにサポートされている唯一の方法は、Authorize 属性を適用することです...

見積もり

MVC はルートを使用し、URL を Web フォーム、PHP、および従来の Web サーバーなどの物理的なファイルの場所にマップしません。したがって、web.config を使用すると、サイトに確実にセキュリティ ホールが開きます。

これが将来変更される場合は、製品チームから連絡がありますが、今のところ例外なくルールです。

例:

デフォルトの ASP.Net MVC プロジェクト (インターネット/イントラネット) から始めます。

以下を追加して web.config を編集します。

<location path="Home">
  <system.web>
    <authoirzation>
      <deny users="*">
    </authoirzation>
  </system.web>
</location>

プロジェクトを実行します。デフォルトではデフォルトルートが使用され、/Home/Indexコンテンツが表示されます。デフォルト テンプレートを変更せずに web.config をバイパスするだけです。なんで?ASP.Net パイプラインは、要求された URL を web.config で指定された場所と比較しているためです。ただし、承認イベントがパイプラインで実行された、ルーティングが行われ (デフォルト ルーティングまたはカスタム ルーティング)、制限されていると思われる領域へのアクセスが許可されます。

さらに、すべての MVCRedirect()は、承認パイプライン イベントの後にルーティングが行われるため、同じセキュリティ対策もバイパスします。

アプリを起動すると、http://:22888 ではなく http://:22888/Home/Index?ReturnUrl=%2f にリダイレクトされます。

デフォルトのテンプレートを使用している場合、認可は を保存し、値が であるreturnUrlにリダイレクトします。が の場合、を追加しないようにのコードを更新できます。/Home/Index%2f/RedirectToActionAccountsControllerreturnUrl/

于 2013-07-27T19:22:58.203 に答える
2

これは、ランタイムの正しい動作です。

認証されていないユーザーへのアクセスを拒否するようにエンジンに指示し、ログイン URL が にあることも伝えました~/Home/Index

これが、デフォルトの URL に移動すると/、エンジンがブラウザをログイン ページに移動させ/、この場合はエンコードされたリターン URL を渡す理由です。

問題は、正しい振る舞いが気になる場合に何をしたいのかということです。

于 2013-07-27T19:22:01.153 に答える
0

ショーには少し遅れていますが、まだ問題がある場合は、web.config のセクションを調べて、他の承認規則 (正しく設定されているか間違っているか) を確認してください。ルートまたはサブディレクトリでのリソースの設定ミスにより、エンドレス リダイレクトが発生する場合があります。

于 2014-04-14T18:08:55.267 に答える