質問

Web アプリケーションのホームページには、 私を覚えてますか チェックボックス。ユーザーがチェックした場合、メール 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 の時間を設定する際のベスト プラクティスは何ですか?
役に立ちましたか?

解決

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

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

FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);

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

HttpCookie authCookie =
  HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

他のヒント

いいえ!クッキーでパスワードを保存しないでください!

ではASP.NET、使用

FormsAuthentication.SetAuthCookie(username, true);
クッキーは(私にチェックボックスの値を覚えている)永続的である場合は、

二番目の引数の値が決定されます。

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

あなたの心、クッキーを傍受する誰もがアプリケーションへのアクセスを取得するように、本質的に安全である「私を覚えて」。しかし、ユーザーのパスワードを暴露すると、その不安はしごダウンさらなるステップかかります。 :-)そしておそらく、彼らが発見した場合、ユーザーは本当に怒っになります。

私は自分のサーバー上のテーブルを除き、ユーザーのアカウントに関連付けられていない(他)の方法であるトークンと組み合わせて、ユーザーのアカウント名を組み込んで暗号化されたクッキー文字列を使用します。サイトへの場合は、ユーザが戻ると、私たちはクッキーを解読し、そのトークンは、そのアカウントに関連付けられて実際にあるかどうかを調べます。トークン(したがってクッキー)は、すべての自動ログインを変更し、その自動ログインのために使用されるものを無効にします。 (複数の場所から自動ログインを可能にするために、トークンとアカウント間の多対1の関係が、あります。あなたがもしあなたのようなことを制限されることがあります。)トークン時間が出て彼らはX日以内に使用されていない場合。 (これは、クッキーの期間を制限することによって行われていないだけで、それはのようによくやった、サーバー側です。)私は人生のビットにしようとする誰かのためのの困難にするためにそこに投げるいくつか他のものがあります。 (本質的に安全である「私は覚えている」、再び)クッキーをデコード(正常に復号化された)、または盗まれたクッキーを使用する(復号化を必要としない)が、やり過ぎに行くにはポイントがありません。

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

私はクッキーにユーザ名を持っている理由

あなたは不思議に思われるかもしれません。ストレート「私を覚えている」の目的のために、私は(すべての後に、それはユーザ名+パスワードシステムにおける認証ペアの半分です)、それが暗号化されている場合でも、そこにそれを持っお勧めしません。私たちはこの質問のためにこれをやったか自分自身を思い出させたときに、私はフォーマットを見たときにビットが私たちのクッキーでそれを見つけるために驚きました。それはそこだと「私を覚えて」とは無関係の理由がある理由が、その後、私は説明するコメントを見ました(必ずしもの説得力のあるの理由から、後知恵が、上の理由で)ます。

は、最終的なノートでは、「私を覚えて」という事実は、本質的に安全であるサイトのログが非常に重要であり、多くの理由の一つであり、あなたが作るために(重要なアカウント情報の変更を可能にするプロセスでパスワードの再検証を必要とすべき理由それは難しい誰かのため)アカウントの所有権を取得するためにクッキーを盗まれた。

Cookie の値を変更してサーバーに送り返すのは非常に簡単なので、これは決して行うべきではありません。「ユーザーは 'naivists' としてログインしている」という情報を Cookie に保存することさえ間違っています。なぜなら、それを「ユーザーは 'Pandiya Chendur' としてログインしている」に変更できるからです。

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

Cookie に保存されているセッション ID をユーザーに与えることができます。これは、ユーザーが値を別の値に変更すると (別のセッションから有効なセッション ID を知っている場合を除き)、自分にとってより良いものを作ることができないためです。

Microsoft の MSDN とは クッキーの使用について述べています:

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

ユーザー名、パスワード、クレジットカード番号など、Cookieに機密データを保存しないでください。ユーザーやクッキーを盗むかもしれない誰かの手に渡るべきではないCookieに何も入れないでください。

同様に、クッキーから得られる情報を疑ってください。データが書いたときと同じであると仮定しないでください。ユーザーがWebページに入力したデータを使用して、Cookie値を操作する際に同じセーフガードを使用します。このトピックの前の例では、ユーザーから取得する情報を表示する前に、ページに値を表示する前に、HTMLがCookieの内容をエンコードすることを示しています。

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

彼らがプレーンテキストとして使用可能です原因クッキーでパスワードを保存するために確保していません。 お好みの基準が何をしている場合はそうか、任意のユーザの要件あなたは、文字列を暗号化することにより、これが行うことができます。それは、この安全を十分に行うことができます。

が、それは推奨されない、

私はあなたのユーザ名とは、Windowsアイデンティティから取得した暗号化認証文字列でトークンを作成する必要があると思います。クッキーにパスワードを保存する必要はありません。私たちは、アプリケーション格納されているユーザー名と認証された文字列

を持っています

ところで、店舗のパスワードは、どこでも、クライアントとサーバー側の両方を確保されていません。

あなたはそれを行う必要はありません。

ブラニスラフに言った、と...

あなたのクッキーに機密データを入れていないことに加えて、また、あなたのweb.configファイルには、少なくとも以下を置くことによって、それらを保護する必要があります:

<httpCookies httpOnlyCookies="true" />
詳細については、

は以下を参照してください。どのように正確にあなたを行うのconfigure httpOnlyCookies ASP.NETですか

これは、すべてのセキュアではありません。クッキーが改ざんすることができ、クライアントコンピュータに保存されます。

  • 安全な情報を送信する場合に必要となる SSL を使用すると、第三者が Web トラフィックを盗聴することがなくなります。これは、ユーザーの資格情報を Cookie に保存するかどうかに関係なく、同じ問題になります。ユーザーがログインするときにユーザー名とパスワードがサーバーに送信され、サーバーがそれをハッシュし、そのユーザーのハッシュされたパスワードと比較すると仮定します。

  • クロスオリジンのため、他のドメインがあなたの Cookie を読み取ることはできないため、問題はありません。

  • したがって、本当に唯一の「セキュリティ ホール」は、誰かが自分のコンピュータに物理的にアクセスした場合です。そうなると、とにかくその人から欲しい情報を入手する可能性が高くなります。Chrome がログイン フォームに自動入力するとき、それは安全ですか?彼らはそれをプレーンテキストで保存していないと思いますが、それは問題でもありません。Chrome が自動入力するページに移動した場合は、フォームからパスワードをコピーするだけで、その人のパスワードが設定されていることを確認できます。

  • 結局のところ、どれだけ「安全」である必要があるかということになります。有効期限をトークンとして使用してユーザー情報を暗号化することが、サービス呼び出しを認証する最良の方法であり、柔軟性が得られるということに私は同意します。ログイン資格情報を Cookie に保存することに関する問題はわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top