2011-01-20 14 views
8

私はPHPがどのようにUnicodeをサポートしているかを学んだのを忘れてしまいましたが、私は「Remember Me」のクッキーをもう少し安全にすることを掘り下げてきました。しかし、私が理解していないことがいくつかあります。自分の思いつきのうちにいくつかの提案や意見があります。PHP:私とセキュリティを覚えている?

1)クッキーを伴わない「Remember Me」機能を採用する方法はありますか?認証Cookieを格納する際に明らかなセキュリティ上の欠陥があるため、興味があります。セキュリティリスクはまったくありません。

2)私は銀行や「機密性の高い」情報を扱っていないため、よりハイプロファイルの領域にユーザーがパスワードを入力するように要求する必要がありますか?とにかく2分後にログインするように頼むと、ログインを思い出すことは無駄になると思われます。

3)(「まったく」以外の)認証クッキーを保存するための絶対的な最良の方法とは何ですか?私は現在、クッキー内に単一のトークンを設定するためにその領域をコーディングしています(time()、そのユーザエージェント、remote_addr、およびsalt-sha256を使用してハッシュされています)。ユーザが戻ったときにトークンの「セッション」テーブルをチェックし、IPとIPを照合してログインします。トークンは存在しますが、IPが一致しない場合は、クッキーをサイレントに設定してログインを要求します彼らが持っていなかった場合。

ありがとうございました。

+0

から(どのようなCookieの値で重要なのは、それがランダムであるということですので、あなたの世代方法より予測可能にするを変更するべきである私は、ここでのポイントを誤解しました)可能な限り、本当に、それは複雑です。例えば、https://github.com/delight-im/PHP-Authを見てください。あなたがやろうとしていることのためにクライアント側にいくつかの永続ストレージが必要です。したがって、クッキーは理想的な選択です。 – caw

答えて

6
  1. 本質的に、クライアント側では何らかのストレージが必要です。クッキーなしでクライアントが誰であるかを知る方法がありません(HTML5クライアント側のストレージなど)。

  2. これはトレードオフであるため、決定する必要があります。新しいパスワードに変更するには、最低、古いパスワードまたは他の形式の確認(電子メール?)が必要です。

  3. すべての通信を暗号化しない限り、Cookieの盗難やその後の偽装から絶対に保護することはできません。これが唯一の安全な方法です。 もちろん、IP、ユーザーエージェントなどをクッキーに関連付けることは役に立ちますが、暗号化に頼る方が簡単で安全です。既存の認証フレームワークを再使用する必要があります

+0

1)そうは思いませんでしたが、根本的な可能性のあるアイディアを求めていたかもしれません。 ;)2)私は電子メール、ユーザー名、パスワードなどの情報を更新するために古いパスワードを間違いなく必要とするでしょう。私は主に何かを購入する(それはゲームサイトで、ユーザーはそのようなオプションを持っています)他のユーザー、そのようなもの。 3)暗号化や暗号化とは対照的に、私は実際にストレージ/チェックシステム(私の最初のデスクリプティングで動作する方法)を指していました。 – Zydeco

+0

@Zyd Ah IP、ユーザーエージェントなどが一致すれば、特定のCookieのみを受け入れると言っていると思っていました。クッキーの唯一の要件は、十分にランダムなので推測できないということです。使用している方法はあまり良いとは言えませんが、それは少し予測可能です。塩分は十分大きければこれを相殺することができます。いずれにせよ、あなたはそれを変えなければなりません。 – Artefacto

+0

もっと明確にするには:HTTPSを使用し、Cookieのハイジャックの大部分を回避する(ユーザーのマシンが侵害されていない限り)Cookieに 'secure'フラグを設定します。 – deceze

関連する問題