69

私の Web アプリケーションのホームページには、RememberMeチェックボックスがあります。ユーザーがチェックすると、メール ID とパスワードを Cookie に保存します。これは私のコードです:

if (this.ChkRememberme != null && this.ChkRememberme.Checked == true)
   {
     HttpCookie cookie = new HttpCookie(TxtUserName.Text, TxtPassword.Text);
     cookie.Expires.AddYears(1);
     Response.Cookies.Add(cookie);
   }

私が知りたいのは:

  • パスワードを Cookie に保存することは安全ですか?
  • 同じことをする適切な方法は何ですか?
  • Cookie の時間を設定する際のベスト プラクティスは何ですか?
4

10 に答える 10

65

パスワードはプレーン テキストとして使用できるため、Cookie にパスワードを保存するのは安全ではありません。

Cookieに関するいくつかの回答を見つけるのに適した場所は、Cookie Central です。メンバーシップには通常、ユーザー名とパスワードを入力すると Web サイトから発行される「トークン」と呼ばれる長い文字列を持つ Cookie が使用されます。プロセスの詳細については、この記事を参照してください。ASP.NET でフォーム認証を使用する場合、次のように認証 Cookie を設定できます。

FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);

2 番目のパラメータは「Remember Me」機能に使用されます。true の場合、サイトを離れた後も保持される永続的な Cookie が作成されます。次のようにプログラムで Cookie を操作することもできます。

HttpCookie authCookie =
  HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
于 2010-01-20T09:51:59.383 に答える
27

いいえ!パスワードを Cookie に保存しないでください。

ASP.NET では、次を使用します。

FormsAuthentication.SetAuthCookie(username, true);

2 番目の引数の値は、Cookie が永続的かどうかを決定します (remember me チェックボックスの値)。

于 2010-01-20T09:59:10.613 に答える
22

いいえ、リモートで安全ではありません。Cookie がプレーン テキストで保存されないという保証はありません (実際、ほとんどの実装では、Cookie はプレーン テキストとして保存されます)。

Cookie を傍受した人は誰でもアプリケーションにアクセスできるため、「remember me」は本質的に安全ではありません。しかし、ユーザーのパスワードを公開することは、セキュリティのはしごをさらに一歩下げることになります。:-) そして、もし彼らが見つけたら、おそらくユーザーを本当に怒らせるでしょう.

サーバー上のテーブル以外では、ユーザーのアカウントに (他の) 方法で関連付けられていないトークンと組み合わせたユーザーのアカウント名を組み込んだ暗号化された Cookie 文字列を使用します。ユーザーがサイトに戻ると、Cookie を復号化し、そのトークンが実際にそのアカウントに関連付けられているかどうかを調べます。トークン (および Cookie) は、すべての自動ログインを変更し、その自動ログインに使用されたものを無効にします。(複数の場所からの自動ログインを可能にするために、トークンとアカウントの間には多対 1 の関係があります。必要に応じてこれを制限できます。) X 日以内に使用されない場合、トークンはタイムアウトになります。(これは、Cookie の期間を制限することによって行われるだけでなく、サーバー側でも行われます。) 生活を少し楽にするために、他にもいくつかのことを入れています。Cookie を解読しようとしたり (復号化に成功した場合)、盗んだ Cookie を使用したり (復号化を必要としない) することは困難ですが、やり過ぎても意味がありません (繰り返しますが、「remember me」は本質的に安全ではありません)。

堅牢なセキュリティが実際には (明らかに) 必要なく、多数の動的 IP クライアントがあるサイトで使用するため、IP にロックダウンしようとはしません。しかし、IP にロックダウンしても安全にはなりません。攻撃面を少し減らすだけです。

Cookie にユーザー名が含まれている理由を不思議に思われるかもしれません。単純な「記憶」の目的で、暗号化されていても、そこに置くことはお勧めしません (結局のところ、ユーザー名とパスワード システムの認証ペアの半分です)。この質問でこれをどのように行ったかを思い出してフォーマットを見たとき、クッキーにそれを見つけて少し驚きました。しかし、なぜそれがそこにあるのかを説明するコメントを見て、「私を覚えている」とは無関係の理由があります(後から考えると、必ずしも説得力のある理由ではありませんが、理由があります)。

最後に、「remember me」が本質的に安全でないという事実は、サイト ログが非常に重要であり、重要なアカウント情報の変更を許可するプロセスでパスワードの再確認を要求する必要がある理由の 1 つです (変更を難しくするため)。アカウントの所有権を取得するために Cookie を盗んだ人)。

于 2010-01-20T10:06:38.597 に答える
12

Cookie の値を変更してサーバーに送り返すのは非常に簡単であるため、これは絶対に行ってはならないことです。「ユーザーは「ナイビスト」としてログインしている」を Cookie に保存することさえ間違っています。「ユーザーは「Pandiya Chendur」としてログインしている」に変更できるからです。

Cookie でできることは、変更されたとしてもサーバーにとって意味のない情報をクライアントに提供することです。たとえば、好きな色、最初のページのレイアウトなどです。

Cookie に保存されているセッション ID を与えることができます。値を別の値に変更した場合 (別のセッションからの有効なセッション ID を知っている場合を除きます)、彼ら自身にとって何も改善できないためです。

Cookie の使用に関するMicrosoft の MSDN の説明:

Cookie に関するセキュリティの問題は、クライアントからデータを取得する場合と似ています。アプリケーションでは、Cookie はユーザー入力の別の形式であるため、調査やスプーフィングの対象となります。Cookie はユーザー自身のコンピューターで利用できるため、ユーザーは最低限、Cookie に保存されているデータを見ることができます。ユーザーは、ブラウザが Cookie を送信する前に Cookie を変更することもできます。

ユーザー名、パスワード、クレジット カード番号などの機密データを Cookie に保存しないでください。ユーザーまたは何らかの方法で Cookie を盗む可能性のある人物の手に渡ってはならないものを Cookie に含めないでください。

同様に、Cookie から得られる情報についても疑ってください。データが書き出されたときと同じであると想定しないでください。ユーザーが Web ページに入力したデータを処理する場合と同じ保護手段を使用して、Cookie 値を処理します。このトピックの前半の例では、ユーザーから取得した情報を表示する前と同様に、値をページに表示する前に Cookie のコンテンツを HTML エンコードする方法を示しました。

Cookie はブラウザとサーバーの間でプレーン テキストとして送信され、Web トラフィックを傍受できる人は誰でも Cookie を読み取ることができます。接続で Secure Sockets Layer (SSL) が使用されている場合にのみ Cookie が送信されるように、Cookie プロパティを設定できます。SSL は、Cookie がユーザーのコンピュータ上にある間は読み取られたり操作されたりすることを防ぎますが、Cookie は暗号化されているため、転送中に読み取られることは防ぎます。詳細については、「Web アプリケーションの基本的なセキュリティ プラクティス」を参照してください。

于 2010-01-20T09:56:00.867 に答える
3

パスワードを Cookie に保存するのは安全ではありません。パスワードはプレーン テキストとして使用できるからです。ただし、優先基準がそうすることである場合、またはユーザー要件がある場合は、文字列を暗号化することでそれを行うことができます. それはこれを十分に安全にすることができます。

推奨されていませんが、

于 2010-01-20T10:35:58.720 に答える
3

Windows ID から取得したユーザー名と暗号化された認証文字列を使用してトークンを作成する必要があると思います。パスワードを Cookie に保存する必要はありません。ユーザー名と認証文字列を保存するアプリケーションがあります

于 2010-01-20T10:45:46.557 に答える
3

ところで、パスワードの保存は、クライアント側とサーバー側の両方で、どこでも安全というわけではありません。

その必要はありません。

于 2010-01-30T15:42:38.850 に答える
2

ブラニスラフ言ったこと、そして...

Cookie に機密データを入れないことに加えて、web.config に少なくとも次のものを配置して、それらを保護する必要があります。

<httpCookies httpOnlyCookies="true" />

詳細については、「 ASP.NET で httpOnlyCookies をどのように正確に構成しますか?」を参照してください。

于 2013-04-09T20:05:30.750 に答える
1

まったく安全ではありません。Cookie はクライアント コンピューターに保存され、改ざんされる可能性があります。

于 2010-01-20T10:00:56.473 に答える