1

フォーム認証inmy ASP.NET 2.0 Webサイトを使用しています。今日のテストでは、私は大きな問題に直面していました。フォーム認証の問題

認証後、私はデフォルトページcreateuser.aspxを持っています。そのページから私は新しいuser.Itを作成していますうまく動作しています。

すべてのセッションをクリアしてログインページにリダイレクトするログアウトボタンがあります。すべてがうまくいきました。

テスト中、私はドラッグ&ドロップでcreateuser.aspx urlをリクエストビルダのfiddlerにドラッグアンドドロップして、フィドラー内のテキストボックスの値を変更した後、実行をクリックします。 私は情報がデータベースに保存されていることにショックを受けました。

これは、ログアウト後にすべてのセッション/クッキーが期限切れになり、フィドラーが動作しないため、私はasp.netフォーム認証でいくつかの重要なことを見逃していたことを意味します。

私はあなたの問題をすべて理解してくれることを願っています。解決策を見つけるのを手伝ってください。私は認証クッキーに疑いがあります。私は正しいかどうかわからない?

+0

uはウルログアウトコードが.... –

+0

こんにちは、あなたは「私は情報がデータベースに保存されてショックを受けた」何を意味しています表示することができますか? Create User画面は、認証されたユーザーのみが呼び出すはずですか?ログインしていないときにブラウザのこのページにアクセスできないと思いますか? Fiddlerからリクエストヘッダーとレスポンスヘッダーを投稿できますか? –

+0

ベン、私はフィドラーがプロキシであることを知っているので、私たちが書いて、コントロールから選択するすべてのテキストがそこに見えます。事実、私たちはパスワードを平文で見ることができます。 SSLを使用していないため、その理由があります。 フォームからログアウトした後、createuserリクエストをフィドラーの「requestbuilder」にドラッグするとリクエストが実行され、コントロール値therも変更できます。今問題は、私はフォームからログアウトしていますが、それ以降は私はバイリンガルを使用して値を保存することができます。どちらが起こるべきではない あなたの意見は何ですか? –

答えて

1

ウェブアプリケーションからログアウトすると、Cookieがクリアされます。はい。しかし

、フィドラーで以前リクエストをドラッグすると、Builderは認証Cookieをコピーする要求にドロップ。

これは、Fiddlerでリクエストを実行すると、再度有効になっている認証Cookieが送信されているため、CreateUser.aspxのアクションが実際に起動し、新しいユーザーの詳細が保存されることを意味しますデータベースに格納されます。

FiddlerのRequest Headersセクションで、次のものまで.ASPXAUTH =を開始しているCookieの部分を削除します。おそらくASP.NET_SessionIdの値も同様に期待どおりに機能することがわかります。

このような振舞いができないようにするには、「Logged In This Session」というフラグを保存し、「Logout」でもクリアして挿入を実行する前にCreateUserのコードビハインド(または複数のページでこの動作が必要な場合は基本クラス)の値。


コメントに対応するための編集:

物事のカップルは、あなたを助ける:

  1. をSSLの下で、サイトのこの領域を置く - したがって、それはのために多くの困難になります誰かがトラフィックを傍受する - しかし不可能ではない - 実際には、フィドラーは中間者の攻撃を行い、クライアントに情報を解読させる自己生成証明書を提供することができる。

  2. 私が上で述べたように、ユーザーは(クッキーから)認証され、セッションの値がいくつか設定されていることを確認することをお勧めします。セッションをクリアすると、これはもはや存在しませんユーザーがCookieを使用して再検証されたとき。それは認証がセッションタイムアウトとアプリケーションの再起動にまたがることができる方法だと

ASP.NET 、クッキーを再検証する必要があります - アプリケーションはシオマネキからの要求がAであるかどうかを知る方法はありませんすべてのセッションデータを削除しますそれはただ殺されたセッション、またはタイムアウトしたセッション、または前回の再起動前に作成されたセッションです。


コメントへのさらなる対応:

Blowdartが正しく指摘するように、セッションと認証クッキーが関連していない、そしてサーバはそれがどこにも発行されたすべての認証Cookieのリストを保持しません。 。したがって、フォーム認証タイムアウト内に発行されたクッキーと、削除されたタイムアウト内で発行されたクッキーとの間にサーバーとの違いはありません。ユーザーがそのクッキー値を再作成した場合、有効なクッキーです。このサポート記事は、クッキー/チケット組み合わせでより多くのINFOMATIONを持っています

Understanding the Forms Authentication Ticket and Cookie

フォーム認証Cookieは、フォーム認証チケットのコンテナに過ぎません。チケットは、各要求とともにフォーム認証Cookieの値として渡され、サーバー上のフォーム認証によって認証されたユーザーを識別するために使用されます。

私はクッキーで認証チケットがユーザーについての他の情報と、サーバーによって受け入れられなかった場合、永続的なCookieが機能しないだろう、早く言って、どんなに多くの場合、ユーザきたように"Remember me next time"を選択すると、サーバーはそれらを覚えていないので、認証状態だけに頼るのではなく、セッションの値(Fiddlerリクエストには存在しないサーバがその情報を破壊するためログアウトした後)。それはユーザーの作成ページが行うことになっているものではありません -

+0

ありがとうございました。実際には、ログアウトした後、フィドラーの助けを借りて、認証クッキーとセッションがサーバーで再検証されてしまうのを恐れています。これは、ハッカーがツールを使用してガベージデータを挿入してアプリケーションを破壊できることを意味します。 ログアウトした後、サーバーがフィドラーからの要求を再検証しないように、ログアウトコードを変更する方法はありますか。 私のログアウトフォームに私は次のコードを使用しています Session.Abandon(); HttpContext.Current.Session.Clear(); httpcontext.current.response.cookies.remove( "AUTHCOOKIE") FormsAuthentication.SignOut(); –

+1

できません。クッキーが保存され、再度送り返された場合、ASP.NETはそれが以前にクリアされたことをどのように知っていますか?認証Cookieはセッションにリンクされていません(セッションCookieも保存され、送信されますが、新しく作成されたセッションはセッション状態で保存されません)。これは本当に脆弱ではありません。 – blowdart

+0

@Blowdart - これがうまくいかなければならないかを合意しました。私が編集で言ったように、認証のクッキーはアプリの再起動以外にどういったものでしょうか?このため、これが懸念される場合は、セッションベースの値も確認してください。これは、フィドラーリクエストによって再作成されません。 –