質問失礼します。
ただいま会員システムを自分で作って勉強しております。
会員システムを作る上で気にしないといけないのがセキュリティの問題だと思います。
現在セキュリティの上で気になっているのがcsrfとSESSIONの持ち方です。
csrfを調べた上でこの解釈と対策方法であっているのか教えていただきたいです。
解釈としてはログインする時などユーザーIDとパスワードを入力してログインしますがまずログインページでランダムな文字のトークンを生成する。
それをhiddenで送る。
イメージとしてはユーザーがformのinputで何か入力するページでトークンを生成し、入力した値をチェックするページやinsertするページにトークンチェックのコードを設置すると考えております。
つまりcsrf対策はユーザーが入力した値を受け取る処理があるページ(ログインページや問い合わせフォーム)等で設定しておけばいいと思っているのですがあっていますでしょうか?
下記がトークンの生成コードにまります。
login.php
$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); $token = $_SESSION['token'];
次にログイン情報をチェックするページにてhiddenで送られて来たトークンとSESSIONのトークンが一致するか検査。
下記がトークンの検査コードです。
login-check.php
if ($_POST['token'] != $_SESSION['token']){ $_SESSION['E-message'] = "no-token"; header("Location: login.php"); exit(); }
あとは全ページでsession_regenerate_id( true )を記述しています。
また、ログインができればSESSIONにログインしたユーザーid(データベース上で一意なもの)を持ち持ちまわってそのユーザーを特定しているのですがidを持ちまわるのは変でしょうか?
持ちまわるのはSESSIONにidが入っているかいないかでページ上部にログインボタンまたはマイページボタンを表示するために持ちまわっています。
回答1件
あなたの回答
tips
プレビュー