私が取り組んでいるコードで私が抱えているこの小さな問題を誰かが助けてくれることを願っていました。これは単なる趣味のサイトのためのものであり、セキュリティ ホールがあることは承知しています。ユーザーが「remember me」ボックスをチェックすると、ログイン スクリプトと登録ページから呼び出される set_remember_cookies という関数を作成しました。
保護された各ページの関数は、次のことを行います。
- 記憶 Cookie が設定されているかどうかを確認します
- データベースにクエリを実行して、Cookie 内のハッシュされたユーザー名に関連付けられた User_ID を見つけます。
- ユーザー テーブルからその User_ID のパスワードを取得します。
- remember_cookies テーブルからソルトを取得します
- パスワード + ソルトをハッシュし、Cookie 内のハッシュされたパスワードと照合します
繰り返しになりますが、ハッシュ化されたパスワードを Cookie に保存することさえ安全ではないことはわかっていますが、今は心配していません。
私の問題は、以下に含めた set_remember_cookies 関数が実際には Cookie を設定していないことです。保護されたページでは、最初のステップ (Cookie が存在するかどうかの確認) が失敗します。また、ブラウザーで Cookie を確認しましたが、保存されていません。
この関数が Cookie を設定しない理由を誰かに説明してもらえますか? エラーは見つかりませんが、誰かができることを願っています! ありがとう!
<?php
function set_remember_cookies($uid, $identifier, $password) {
mysql_query("DELETE FROM remember_cookies WHERE User_ID = '$uid'"); //Delete old cookie records
$salt = sha1(uniqid(time() . $_SERVER['HTTP_REFERER']));
$username_hash = hash("sha256", $identifier . $salt); //Hash the username
if (mysql_query("INSERT INTO remember_cookies (User_ID, Username_Hash, Salt) VALUES ('$uid', '$username_hash', '$salt')")) {
setcookie("Username", $username_hash, 60*60*24*365);
setcookie("Password", hash("sha512", $password . $salt), 60*60*24*365);
}
}
?>