2011-09-08 21 views
0

私はRemember Me機能のためにCookieを使用します。どのようにしてCookieを保護できますか?

これは私がクッキーを設定する方法である:

$value = $dbusername.'|'.$dbpassword; 
setcookie('abc', $value,time()+60*60*24*180, '/'); 

はクッキーを取得します。

$cookie = $_COOKIE['abc']; 
$values = explode("|", $cookie); 
$username_ck = $values[0]; //ck stands for cookie 
$password_ck = $values[1]; 

私のクッキー(ユーザー名/パスワード)を確保するための良い方法は何ですか? 私のデータベースのパスワードはプレーンテキストで保存されています。私はdbでパスワードを暗号化したくありません。

+2

何を使用していますか?なぜセッションはありませんか?プレーンテキストのパスワードを保存することは常に悪い考えです。 – deceze

+1

私は1つのコメントしか得ていません。 – Bassem

+0

私はすでにセッションを持っています...上記は私を思い出すためのものです。 – user311509

答えて

3

まずパスワードを平文のdbに保存しないでください!

2番目:決してクッキーにプレーンテキストでパスワードを保存しないでください!

第3に、Remember meオプションのようなものを実装するためにCookieを使用する場合、パスワードをCookieに保存する必要はなく、毎回自動的に無効になるdbとCookieの両方に格納されたランダムトークンユーザーがログオンするたびに新しいログを作成します。

すでに言及しました。パスワードを平文で入力しないでください

EDIT

してくださいまた、チェックアウト:http://jaspan.com/improved_persistent_login_cookie_best_practiceクッキーを使用しての最良の方法(私はすでにあなたに言ってみました何の基本的ステップバイステップの説明を)説明し

。私はより良い方法はまだ見つかっていないので、:)私は最善の方法を言う

1

パスワードはプレーンテキストとして表示されるので、決してクッキーに保存しないでください。ハッカーがそのCookieをキャッチして開き、パスワードを見つけた場合、ユーザー名を見つけるまでには時間がかかります。

データベースに必要な悪い習慣ストアのすべてのものと$ _SESSIONを使用して起動し、[]

0

あなたは本当にあなたのパスワードを暗号化する必要があります。ユーザーの入力をデータベースのその値と比較し、その入力を暗号化して比較する場合は、少なくともmd5を使用してください。

もう1つ、パスワードをクッキー。

3

これまでに平文のパスワードをデータベースに保存したことはありませんでした。理由を調べるために、単にGoogleの「平文パスワード」をデータベースに入れてください。パスワードは、少なくともSHA1ハッシュとしてランダムな塩とともにデータベースに格納する必要があります。

あなたはあなたのやり方をクッキーで保護することはできません。悪化していない場合でも、クロスサイトリクエスト偽造に自分自身を開放しています。また、その有効性が保証されるように、暗号化されていない場合はクッキーに署名するための安全なランダムなハッシュも生成する必要があります。しかし、クッキーに関連するパスワードは一切ありません。セッションにプライベート・データを格納する必要がある場合(これは避けてください)、セッションをDBまたはmemcacheに格納する必要があります。

私は参考にしようとしていますが、このセッション維持の方法は狂っています。してください、してください、再考してください。

0

user表に追加remember_key VARCHAR 32

と呼ばれるフィールドと、ユーザーのログイン設定し、このユーザテーブルで:

$remember = md5(uniqid(mt_rand(), true)); 

更新クエリ:

"UPDATE user SET remember_key = $remember WHERE id = $id"

ユーザーがページクエリに再入力してくださいクッキーユーザーテーブルに:

"SELECT * from user WHERE remember_key = " . esc($_COOKIE['remember'])

if ($num_rows == 1) $login = true;

申し訳擬似コードと、文字列

私は

+0

ハッカーがクッキーを盗んで、ブラウザの一時フォルダに入れたらどうなりますか?ハッカーはサイトに入るだけで簡単にアクセスできます。 – user311509

+0

@ user311509:ハッカーがクッキーを盗むことができる場合は、より大きな問題があります。ハッカーはあなたのマシンにアクセスできる必要があるでしょうから。 – PeeHaa

+0

@ user311509このスクリプト[cookies-remember-me](http://www.webdesign.org/web-programming/php/cookies-remember-me.9107.html)を使用する場合は、ハッキングされる – tttony

0

は、私はあなたがそのコード全体を交換する必要があると考えている答えを更新するをエスケープすることを忘れていけません正直に言ってセッションを研究してください。 私がそれを言う理由は、

まず、あなたのセッションはすでに安全です。セッションが行うことは、ユーザーのコンピュータに1つのクッキーとトークンを入れ、残りのデータをサーバーに保存することです。だから、あなたは必ずしもパスワードとユーザー名を暗号化する必要はありませんが、あなたはまだいくつかの強みを持つことができます。

第2に、複数のIPにまたがる人は、コンピュータ名や他の簡単なものと照合して真正性を保証するため、セッションをコピーできません。

第3に、セッションはクッキーよりもずっと早くなります。ページが読み込まれるたびに、ブラウザはすべてのCookieをサーバーに送信する必要があります。これは、静かに多くの記憶をすることができます。セッションが1つのクッキーしか持たないところ。

session_start(); //Has to go at the top of your page! On each page that uses a session. 
$_SESSION['USERNAME'] = $dbusername; 
$_SESSION['PASSWORD'] = $dbpassword; 

//And to retrieve you just call back the parameter. 
$username = $_SESSION['USERNAME']; 

チェックアウトの詳細情報については、PHPマニュアル:ストアのセッションデータに

、次の操作を行うことができます。 http://www.php.net/manual/en/session.examples.basic.php

関連する問題