プログラミング方法をテストするために使用している基本的なサイトがあり、人々がログインし続けるためのある程度安全な方法を取得したいと考えていますregister.php
.
$username = $_POST["username"]; //username stored plaintext
$passhashed = crypt($_POST["password"], $username); //hashed password salted with username
$rnum = rand(1000,9999); //assign random 4-digit number
$authkey = crypt($rnum, $passhashed); //unique authentication key per user, hashed and salted with hashed password
//insert into SQL
ログインすると、$username
、$passhashed
、$authkey
がデータに格納され$_SESSION
ます。
すべての単一ページの上部に、次のコード スニペットがあります。
if(isset($_SESSION["username"])
&& isset($_SESSION["password"])
&& isset($_SESSION["authkey"])) {
$verifyuser = $db->prepare("
SELECT *
FROM users
WHERE username = :user
AND password = :password
AND authkey = :authkey
");
$verifyuser->execute(array(
':user' => $_SESSION["username"],
':password' => $_SESSION["password"],
':authkey' => $_SESSION["authkey"]));
if($verifyuser->rowCount() != 1) {
unset($_SESSION["username"]);
unset($_SESSION["password"]);
unset($_SESSION["authkey"]);
}
}
基本的に、任意のページで、各ピース ストアが$_SESSION
SQL で消去されることを確認し、そうでない場合 (いずれかのチェックが失敗した場合、rowCount
1 以外の値を返します)、セッションをドロップします。
私は、セッション ハイジャックを回避するための最新のセキュリティ対策にあまり精通していないことを最初に認めます (実際、私はそれがどのように行われるかについて大まかなコマンドしか持っていません)。そうは言っても、初心者のプログラマーにとってこれはどうですか?より安全にするために何ができますか? ログイン時に 2 番目の認証キーを割り当て、一時的に SQL に保存し、同じチェック (ログインごとに新しいキー) を行いますか?