ここからスクリプトを使用しています:http://www.php-login.net
自分のニーズに合わせて変更しましたが、スクリプトに次の部分が表示されます。
// if user has an active session on the server
elseif (!empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)) {
$this->loginWithSessionData();
// checking for form submit from editing screen
if (isset($_POST["user_edit_submit_name"])) {
$this->editUserName();
} elseif (isset($_POST["user_edit_submit_email"])) {
$this->editUserEmail();
} elseif (isset($_POST["user_edit_submit_password"])) {
$this->editUserPassword();
}
サーバー上にセッション変数があり、技術的に直接変更できないため、セッション変数がどのように機能するかはよくわかりませんが、コードのこの部分は、誰かがクッキーをいじった場合に間接的に変更できることを示しています。
private function loginWithSessionData() {
$this->user_name = $_SESSION['user_name'];
$this->user_email = $_SESSION['user_email'];
// set logged in status to true, because we just checked for this:
// !empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)
// when we called this method (in the constructor)
$this->user_is_logged_in = true;
}
可能かどうかはわかりませんが、Cookie をいじって username=x を設定し、運が良ければ is_logged_in を 1 に設定すると、ユーザーにアクセス権を与えることができますか? セッションを検証するより安全な方法があると確信していますか、それともクッキー自体にも、マシンハッシュのチェックなどの独自の種類の検証が付属しており、そのハッシュもサーバーに保存されているハッシュと一致する必要がありますか? user_logged_in のような単純なものの代わりに、iftodaywasarainyday というランダムな文字列を使用し、内部でコメントするだけで、その値が自分の is_logged_in に対応するものか、それとも問題になるかがわかります。
私はこの件についてもう少し読んでいきますが、ページの最初の3つの単語は「シンプルでクリーンで安全」であり、サイトはかなり見栄えが良いので、著者の言葉を借りたと思いますが、私がリファクタリングしていたのでコードには多くの todo ステートメントがあり、完成したスクリプトではなく進行中の作業が心配になりました