ターミナルからプログラムのデータを確認して処理したときのメモ
現場で困ったこと
〜 状況 〜
出向したての現場で、初めて見るソースコード、独自フレームワークでファイル構造とか全然わからなかった。
● やりたいこと=管理画面にログインすること。
とりあえずユーザー登録しようとして新規登録画面にアクセスしたけど、アクセス拒否でできなかった。
現場の人にちょっと聞いてみると、「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