1

プログラミング方法をテストするために使用している基本的なサイトがあり、人々がログインし続けるためのある程度安全な方法を取得したいと考えています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"]);
    }
}

基本的に、任意のページで、各ピース ストアが$_SESSIONSQL で消去されることを確認し、そうでない場合 (いずれかのチェックが失敗した場合、rowCount1 以外の値を返します)、セッションをドロップします。

私は、セッション ハイジャックを回避するための最新のセキュリティ対策にあまり精通していないことを最初に認めます (実際、私はそれがどのように行われるかについて大まかなコマンドしか持っていません)。そうは言っても、初心者のプログラマーにとってこれはどうですか?より安全にするために何ができますか? ログイン時に 2 番目の認証キーを割り当て、一時的に SQL に保存し、同じチェック (ログインごとに新しいキー) を行いますか?

4

2 に答える 2

2

おっしゃるとおり、私もセッションハイジャックについて基本的な理解があります。

ただし、これら 3 つがハイジャックされた場合でも、アカウントのハイジャックを防ぐことはできませんが、それは難しくなります。

セッションハイジャックの防止を読んでいるときに、次のような単純な例を見ました-現在のIPがセッションと一致しない場合、ユーザーをログアウトします。

<?php
if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
{
session_destroy();
}
?>

典型的な例: 上記の Web サイトが見つかりません...

あなたを助けるかもしれないいくつかのリンク:

セッションハイジャックの防止

PHP での適切なセッション ハイジャック防止

于 2013-09-22T23:29:23.800 に答える