asp.netでは、通常どおりフォーム認証を使用してログインし、認証Cookie値をコピーしてログアウトし、Chrome用の[このCookieを編集]アドオンを使用してクライアントにCookieを人為的に追加し、(匿名の)ランディングページを更新できます。そして、ちょっとプレスト私は再びログインしています。これは脆弱性のようです-標準のフォーム認証を使用して修正する方法はありますか、それともasp.net mvcの既存の属性をオーバーライドするカスタムの承認属性を使用するようなことをする必要がありますか?
3 に答える
これ自体はバグではないと思います。フォーム認証中に次のことが発生します
- サーバーにユーザー名/パスワードを提供します
- サーバーはユーザー名/パスワードを検証します
- 有効な場合、サーバーは暗号化された認証チケット(cookie)を有効期限(web.configフォーム認証セクションで設定)とユーザー名(すべて暗号化)とともにクライアントに送信します。
- 承認が必要なリクエストごとに、Cookieがサーバー上で復号化され、有効期限がチェックされ、ユーザー名が承認されているかどうか(またはリクエストされたリソースに対してその役割を取得しているかどうか)が確認されます。
- ログアウトすると、Cookieの有効期限が過去に設定されているため、有効なCookieではなくなります
さて、なぜあなたが見ているものを見ているのかについて...あなたはログアウトする前にクッキーをコピーしています。したがって、コピーしたCookieがログアウト(移動した有効期限)を登録することはありません。再接続しても、有効な認証Cookieが残っています。ここで、フォーム認証のタイムアウトが...たとえば20分に設定されている場合...このメソッドは、Cookieをコピーして21分待つと失敗し、その時点で期限切れになっています。
クッキーは常に脆弱であり、私たちはそれについて多くを行うことはできません。私たちにできることは、誰かがクッキーを盗むのを防ぐことです。
ASP.NET MVCに関しては、Cookieを盗まないようにするのが効果的です。セキュリティの一部としてデフォルトで実行される主なことのいくつかは次のとおりです。
XSS攻撃を防ぐために、ビューにレンダリングされる文字列をエンコードします(Razorを使用している場合は他の人のことを知りません)。
検証を要求します(潜在的に危険なデータがアプリケーションに到達するのを防ぎます)。
JSONデータのGETアクセスを防止します。
偽造防止ヘルパーを使用したCSRFの防止
クッキーに関してマイクロソフトはHttpOnly
機能を提供しており、これはジャバスクリプトからクッキーを隠すのに役立ちます。あなたが話しているForms認証はHttpOnly
Cookieであるということは、誰かがJavaScriptを介してそれを盗むことができないことを意味し、より安全です。
あなたはどんなクッキーでもそれをすることができます。任意のドメインからすべてのCookieを検査/コピーし、必要に応じてなりすましを行うことができます。あなたのPC(またはユーザーがPCにログインしている)のために、あなたはあなた自身に(のみ)それをすることができます。明らかに、共有PCを使用している場合、それは問題です(すべての情報にわたって)。
「Cookieをコピーする」という行為は、実際、マルウェアがID(または一部のWebサイトの現在のセッション)を盗んだり乗っ取ったりしようとする1つの方法です。とはいえ、マルウェアがない限り、他人の「Cookieをコピー」することはできません。
完了したと仮定するとlogout
、期限切れのCookieが(ファイル)システムから削除されるように、ユーザーにブラウザーを閉じるように依頼できます。