私は主にC++プログラマーですが、PHPを手に入れようとしています。
どうやら、Webユーザーセッションを実装する方法は、$_SESSION変数を使用してユーザーのログインIDをCookieに保存することです。
誰かが自分のCookieを変更したり、別の特権を与えたり、別のユーザーとしてログインしたりすることはできませんか?
この認証メカニズムは、ユーザーにIDをファイルに保存させ、変更しないように信頼しているようです。
これを妨げるものはありますか?
ありがとう!
私は主にC++プログラマーですが、PHPを手に入れようとしています。
どうやら、Webユーザーセッションを実装する方法は、$_SESSION変数を使用してユーザーのログインIDをCookieに保存することです。
誰かが自分のCookieを変更したり、別の特権を与えたり、別のユーザーとしてログインしたりすることはできませんか?
この認証メカニズムは、ユーザーにIDをファイルに保存させ、変更しないように信頼しているようです。
これを妨げるものはありますか?
ありがとう!
PHP セッションは、アプリケーションが作成するときにのみ安全です。PHP セッションは、ユーザーが自分自身を識別するための疑似ランダム文字列 (「セッション ID」) をユーザーに提供しますが、その文字列が攻撃者によって傍受された場合、攻撃者はそのユーザーになりすますことができます。
この情報は、PHP マニュアルの「Session Management Basics」から取得したものですが、少し簡略化しています。いくつかのことが見逃されている可能性があります。そちらも必ず読んでください。
有効にするsession.use_strict_mode
:
$userId-
)有効session.use_only_cookies
化および無効化session.use_trans_sid
Referer
ヘッダーに表示されないようにしますセッション ID を定期的に再生成し、再生成後すぐに古いセッション IDを無効にする
$_SESSION
必要に応じて、リクエストに関連する追加情報 (IP アドレス、ユーザー エージェント文字列など)を追跡します。
いいえ、セッションはサーバーに保存されており、ユーザーがアクセスすることはできません。ログインセッションなど、サイト全体の情報を保存するために使用されます。
使用例は次のとおりです。
<?php
session_start();
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
}
?>
次に、サイト全体でセッションにアクセスして、ユーザーが認証されているかどうかを確認できます。
<?php
session_start();
if ($_SESSION['auth']) {
echo "You are logged in!";
}
?>
ユーザーはこれらの値を編集できませんが、セッションのIDは、長いランダムな文字列としてCookieを介してコンピューターに保存されます。許可されていないユーザーがこれらの文字列にアクセスすると、サイトにアクセスする可能性があります。
これを行う場合:
$_SESSION['user'] = $username;
その後$username
、Cookieに直接保存されません。代わりに、一意のセッションIDが生成され、Cookie内に保存されます。
保存する情報$_SESSION
はサーバー側にのみ保存され、クライアントに送信されることはありません。その後のクライアントからの要求に応じて、サーバーはCookieに保存されているIDでセッションデータをロードしますsession_start()
。
比較的安全です。発生する可能性がある唯一のことは、誰かがセッションIDを傍受して、実際のユーザーセッションを盗む可能性があることです。ただし、HTTPSはそれを防ぐことができます。
この質問に答えるには、2つのアプローチが必要です。
PHPセッションIDは、ほとんどのユースケースで推測するのに十分なほど困難です。他の広く使用されているシステムほど難しくはありません。
セッションCookieのみ(およびセッションCookieの存在のみ)を信頼することは、このセッションCookieがどこから来たのか(PHPまたは他の場所)に関係なく、セキュリティ面ではそれほど遠くないようです。
つまり、要するに、PHPセッションは、使用することで安全になるのと同じくらい安全です。これは、私が知っているすべてのセッションCookieベースのシステムに当てはまります。
このトピックについてどのような答えが得られても、このトピックには非常に多くの異なる意見があるため、おそらく満足することはできません. セッションや PHP セキュリティ全般について書かれた本もあります。
ここで期待できる最良の答えは、おそらく「セッションはあなたが望むほど安全です」です。より多くの作業とより多くの注意事項により、明らかに安全に使用できますが、実装自体により多くの時間がかかります. すべての場合と同様に、ニーズに対してどれだけ安全であるかを測定するのはあなたです。