0

セッション プロパティにデータベースの値を入力する理由はありますか?

1

$_SESSION['hash']  = query_row['hash']; //hash from database; unique to each user

次に、各ページで、セッションが存在するかどうかを確認します

if(isset($_SESSION['hash'])) && $db->checkLogin()
{
//user session is still valid
}

それによって:

function checkLogin($session_hash)
{
if($_SESSION['hash']) 
{
 //check if $session_hash is found in database
}
    }

使用する代わりに

2

$_SESSION['islogged_in']  = true;

セッションが設定されているかどうかのみを確認します

if(isset($_SESSION['islogged_in']))
{
//user session is still valid
}

最初の方法を使用すると、保護が強化されますか? セッション値を「true」ではなく一意のものに設定するのが賢明ですか? $_SESSION[] 値をデータバンク データで検証するのは賢明ですか? そして、なぜそれはより安全なのでしょうか?

編集:固定とハイジャックからセッションを保護するための標準的な方法はどれか知っています。これは私の質問ではありません:)

方法1を使用する理由がまったく見つかりません(データバンクで検証するか、ユーザー名などの一意のデータでセッションプロパティを設定することさえあります..)私の知る限り、セッションプロパティはサーバー側に保存されているため、ユーザー/ハッカーそれらを変更することはできません。セッション保護 (ハイジャックと修正) は、セッション ID のみを保護します。これは、Cookie でクライアントに保存される唯一のものであるためです (したがって、変更することができます)。とにかく、インターネット上の多くのプログラマーがこれを行っているのを見ているので、私は尋ねています。

4

2 に答える 2

0

ユーザーが正常にログインしたことを除いて、ユーザーについて何も知りたくない場合は、IDを保存してIDが存在するかどうかを確認する理由はありません(またはこのようなもの)。あなたとあなただけがセッションに書き込むことができます。サーバーがハッキングされた場合 (例: サーバーにコードやセッションをアップロードできる人もいます)、セッション データ (セッションに書き込む) が有効かどうかを確認するよりもはるかに多くの問題があります:)

于 2012-11-16T23:46:40.763 に答える
0

セッションはサーバーによってのみ設定できるため、設定されている場合は、ユーザーが検証されたことがわかります。最初の方法は、毎回不必要にデータベースを再度チェックするため、安全ではありません。これらの方法はいずれも、セッション ハイジャックを防ぎません。

セッションのハイジャックから保護したい場合は、ユーザーの IP をセッションに保存し、変更されていないことを毎回確認することもできます。これは非常にシンプルで簡単なチェック方法です。他のより堅牢な代替手段が必要な場合は、このページをご覧になることをお勧めします。

于 2012-11-16T22:19:37.570 に答える