質問: レンタルサーバーにてサイト制作(HTTPS) PHPにてMYSQLから会員ID,パスワードを比較し (複数回ログイン失敗時は特定時間ログイン処理出来ないように設定) `COOKIE['session_check']`に照合一致の文字列を有効時間指定で書き込み データが入ってない場合はログインページへ戻るようにしてあります ``` ``` PHPのファイルはブラウザからは見れないのですが `$_COOKIE['session_check']`に「ログインOK」と入れればサイト表示が可能とわかります 危険性について何があるのか何かありましたら教えてください 追記(te2ji様指摘から) ※ログインしたことない人が不正にアクセスする手段等おしえてほしいです PHP:7.1.14
回答: この方法には問題点があります。主な問題点は * 第三者がアクセスしても誰からCookieが流出したかがわからない * 強制ログアウトが実装できない * ユーザを退会させてログインできなくする事ができない ということです。 一度ログインできたユーザはCookieの内容を知っているので、ログインフォームが使えなくても直接Cookieを設定することでログインできます。 Cookieの情報は誰でも書き換えることができます。(簡単な方法としては、ページで右クリックして、`要素の検証`をクリック>`コンソール`で下の文字列を入力して再読み込みするとパスワードなしでログインできます) ``` document.cookie='session_check=ログインOK'; ``` Cookieのようにユーザから送られてくる情報は全て書き換えられるので、信用してはいけません。 PHPでしたらセッションを使ってログイン状態を保存したらいいかと思います。 セッションでも「セッションID」と呼ばれる情報をCookieに保存して、その値でユーザを区別していますが、セッションIDが他の人にバレない限りは安全です。 セッションIDが他の人にバレると、そのセッションIDを自分のブラウザに設定することで、ユーザをなりすますことができますが、それを防ぐためにセッションIDはランダムに生成されている上に長い値になっているので、推測は事実上不可能です。 他の人のセッションIDを当てて なりすましをする攻撃を「セッションハイジャック」と言いますが、使い方を間違えなければ安全なので、心配する必要はありません。 詳しくはQiitaの記事にわかりやすいものがあったので、読んでみるといいと思います。