📖

ターミナルからプログラムのデータを確認して処理したときのメモ

2025/02/02に公開

現場で困ったこと

〜 状況 〜
出向したての現場で、初めて見るソースコード、独自フレームワークでファイル構造とか全然わからなかった。

● やりたいこと=管理画面にログインすること。
とりあえずユーザー登録しようとして新規登録画面にアクセスしたけど、アクセス拒否でできなかった。
現場の人にちょっと聞いてみると、「DBに直接データ入れて〜」と言われた。

DBでuserテーブルにinsertで直接データを入れて、
ログイン画面でメールアドレスとパスワードを入力したけどログインできなかった。。。

そのときの対処法メモ✏️

原因

新規登録画面から登録する場合、パスワードはPHP処理でハッシュ化してDBに登録していた。
そのため、ログイン画面でもパスワードはハッシュ化して入力チェックしていた。

自分は直接userテーブルにデータをinsertしたので、パスワードをハッシュ化していなかった。
一般的にパスワードのハッシュ化は必須だ🥲

やったこと

● userテーブルのパスワードをハッシュ化し直す必要がある!

dockerを使っているので、コンソールからdockerコンテナに入る。

MacBook-Air-2作業スペース% docker exec -it コンテナ名 /bin/bash

php -a コマンドでPHP対話モードになる
 → PHPのコードを打ち込んで直接処理をすることができる!

root@✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎✖︎:/var/www/html# php -a
Cannot load Xdebug - it was already loaded
Interactive shell

php > 対話モード○

phpファイルを確認すると、
パスワードのハッシュ化方法は「入力されたパスワード + 特定の文字列("__nannkanamae")」
に対してmd5関数でハッシュ化されていた。
md5($password . "__nannkanamae")

なので、php対話モードを利用して自分が入れたパスワードが上記の処理で何になるのか確認する。
普通の実装のように、変数でパスワードを設定し、上記でハッシュ化される値は何かechoで出力させて確認する。

php > $password="mypassword";
php > echo md5($password . "__nannkanamae");
e8eb71eee556bfea4152f0497bd15b7a

e8eb71eee556bfea4152f0497bd15b7aが得られたので、
DBコンテナでmysqlにアクセスし、userテーブルのパスワードカラムをupdateする。
◎ where句で絞るの忘れない🥹

mysql> UPDATE user SET password = 'e8eb71eee556bfea4152f0497bd15b7a'  WHERE id = 1;

これでuser.password = ログイン画面で入力するパスワード(←ハッシュ化される)になるので、無事にログインできた⭕️

Discussion