1

これはかなりばかげた質問のように思えますが、私はこれを行うための最良の方法を見つけようとしています。/ Logoutページにリダイレクトして、コントローラーにFormsAuthentication.SignOut関数を呼び出させますか?

それが私の最初の考えでしたが、それからサードパーティのWebサイトによって悪用される可能性があるのではないかと思いました。誰かがあなたの/Logoutページへのリンクを投稿することにしたとしましょう。ユーザーはアプリケーションからサインアウトします。それを防ぐ良い方法はありますか?

4

7 に答える 7

5

このような悪意のあるリンクは、クロス サイト リクエスト フォージェリ (CSRF) として知られるセキュリティ脆弱性のクラスの一例です。ログアウト リンクは比較的無害ですが、リモート サイトが多数の非表示のフォームを設定し、それらをサイトに投稿して、POST を通じて可能なアクションを実行する可能性があります。

最も一般的な対策は、各フォームにランダムな非表示の値であるチャレンジを含め、その値を確認することです。リファラー ヘッダーを確認するとうまくいく可能性がありますが、一部のブラウザーではリファラーがまったく送信されないことに注意してください。

詳細: http://en.wikipedia.org/wiki/Cross-site_request_forgery

于 2008-10-21T00:59:49.043 に答える
4

ユーザーが悪意のあるリンクを使用して誤ってアプリケーションからログアウトすることを懸念している場合は、リファラーをチェックして、ログアウトがサイトからのものであることを確認できます(または、ユーザーが単に入力した場合はNULLです。のURL)。

誰かをログアウトするのは面倒ですが、必ずしもセキュリティ上のリスクがあるとは限らないので、実際にはこれについて心配する必要はありません。

于 2008-10-21T00:36:45.610 に答える
3

これが私が使っているものです。

public ActionResult Logout()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}

正常に動作しているようです。

サードパーティのWebサイトは、自分自身をログアウトするだけです。したがって、実際に[ログアウト]をクリックするのと何ら変わりはありません。

于 2008-10-21T00:24:27.757 に答える
2

これは古い質問ですが、MVC を使用した最新の例を次に示します。

[Authorize]
public RedirectResult Logout()
{
    FormsAuthentication.SignOut();

    return this.Redirect("/");
}

アクションに属性をLogout適用することで、ログインしているユーザーのみがアクションを呼び出せるようにすることができます。Authorize

于 2014-05-13T07:11:43.957 に答える
2

新しい ASP.net MVC Beta には AccountController が含まれています。これは、登録からログイン/ログアウト、パスワードを忘れた場合の機能まで、基本的にすべてを実装しているため、一見の価値があるかもしれません。それがどれほど良いかはわかりませんが、確かに良い出発点です。

于 2008-10-21T01:01:48.540 に答える
1

ActionResult から派生

public class LogoutResult : ActionResult
{
    private readonly IAuthenticationService _authenticationService;
    private readonly IWebContext _context;

    public LogoutResult(IAuthenticationService authenticationService, IWebContext context)
    {
        _authenticationService = authenticationService;
        _context = context;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        _authenticationService.Logout();
        _context.Abandon();
        _context.Redirect("~/");
    }
}
于 2008-10-21T03:20:26.997 に答える
0

クライアントを真のユーザーとして識別するCookieなどを探す必要があります。

于 2008-10-21T00:20:43.180 に答える