PHP でユーザー管理、ログイン認証システム制作

PHP でユーザー管理、ログイン認証システムを制作する

PHP 開発環境がない場合は「 AlmaLinux8.5, Apache2.4, MySQL8.0, PHP8.1 」で LAMP 環境を構築後に実施



練習1 : ユーザー管理システム

ユーザー管理システムフロー

サーバーに練習用の DB とユーザー管理テーブルを作成

▼ MySQL にログイン

# mysql -u root -p
Enter password: (パスワード入力)


▼ DB practice を作成

mysql> CREATE DATABASE practice;


▼ DB practice に移動

mysql> use practice;


▼ t_user テーブルを作成

mysql> CREATE TABLE t_user(
id SERIAL PRIMARY KEY,
mail TEXT NOT NULL,
password TEXT NOT NULL,
status SMALLINT DEFAULT 1,
registed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated TIMESTAMP NULL DEFAULT NULL
);

  • id : シリアル値
  • mail : メールアドレス
  • password : パスワード(パスワードハッシュ)
  • status : ステータス(1:稼働, 2:停止, 9:削除)
  • registed : 登録日時
  • updated : 更新日時

▼ ユーザーリストページ制作

user_list.php

  • htmlspecialchars : XSS(クロスサイトスクリプティング)対策

(ブラウザ表示 : データなし)

(ブラウザ表示 : データあり)


▼ ユーザーフォームページ制作

user_form.php

  • CSRF トークン : CSRF(クロスサイトリクエストフォージェリ)対策

(ブラウザ表示)


▼ ユーザーチェックページ制作

user_check.php

(ブラウザ表示)


▼ ユーザーデータエントリー制作

user_entry.php

  • password_hash : パスワードをハッシュ化して DB に登録

▼ ユーザー管理システム動作テスト項目

  • ユーザー情報のリスト表示(ステータス「削除」は非表示)
  • メール項目の入力チェック(NULL / 形式 / DB既存)
  • パスワード項目の入力チェック(NULL)
  • メール項目のエラー表示
  • パスワード項目のエラー表示
  • XSS、CSRF 対策
  • ユーザー情報の登録処理(パスワードハッシュ化)
  • ユーザー情報の更新処理(パスワードハッシュ化, パスワード変更あり / なし)
  • ユーザー情報の削除処理(論理削除)

練習2 : ログイン認証システム

ログイン認証システムフロー

▼ ログインフォームページ制作

login.php

(ブラウザ表示)


▼ 認証チェック制作

auth_check.php

  • password_verify : 入力したパスワードとハッシュがマッチするかチェック

▼ ログイン認証チェックコードをユーザー管理システムの構成ファイルに追加(session_start 以下に追加)

(ログイン認証チェックコード)

▼ ユーザー管理システム構成ファイルにログイン認証チェックコード追加

  • user_list.php
  • user_form.php
  • user_check.php
  • user_entry.php

▼ ログアウトは ログイン認証済 SESSION 削除


▼ ログイン認証システム動作テスト項目

  • メール項目の入力チェック(NULL)
  • パスワード項目の入力チェック(NULL)
  • ログイン認証エラー表示(入力チェック, DBデータ)
  • XSS、CSRF 対策
  • 未認証時ユーザー管理システムへのアクセス制限(直接アクセス禁止)

ポイント

  • DB のデータ削除は論理削除(削除したデータとして取り扱う)
  • DB に登録するパスワードは password_hash でハッシュ化
  • パスワードチェックは password_verify 利用
  • XSS、CSRF 対策
  • 認証チェックコードによりアクセス制御