phpパスワード暗号化「password_hash()、password_verify()」簡易ログインフォーム
こんにちはmiyaです。
しばらくプログラミングの勉強をブログにしていませんでした。
今年はぼちぼち再開していきます。
今年最初のテーマとしてphpの簡易ログイン処理を行っていきます。
大学で使用するウェブサービス(ゼミ生向け)を作成していて、メモとして残したいことを記事としていきます。
今回はパスワードをhash関数で暗号化し、ログインフォームを作成しました。
まずはログイン画面としてhtmlのコードです。
※headerやbody、metaなどのタグは省略します。
セッションをスタートさせておきます。
login.php
<?php session_start(); ?> <html> <h3>LOG IN</h3> <p> <form method="post" action="ref.php"> パスワード:<input type="password" name="passwd" > <input type="submit" name="login"> </form> </p> </html>
次にpassword_hash()を使用して、ハッシュ値を生成します。
今回はphpのインタラクティブモードを使用します。
Macの場合ターミナルから php -aコマンドでインタラクティブモードシェルを有効にします。
password_hash関数では第2引数に利用するアルゴリズムのコストを記述しますが、今回はデフォルトを使います。
>php -a Interactive shell >echo password_hash("ここに暗号化したいパスワード", PASSWORD_DEFAULT); $2y$10$u9TjWGFXHmjp4aw1KLwxO.iWKO3e/2uNXLXqnoMYXOFNNNOn867yK
上記のようにハッシュ値が得られました。忘れずにコピーしておきましょう。
ログイン処理を書いていきます。
事前に成功した場合に表示するページ(success.php)と失敗した場合に表示するページ(error.php)を作成しておきます。
ここではpostを利用してinput.phpから入力されたパスワードを受け取って、パスワードが正しいかチェックし処理を分けていきます。
パスワードの確認のためpassword_verify関数を使用します。
password_verify関数では第1引数に入力されたパスワード、そして第2引数にハッシュ化されたパスワードを記述します。
ref.php
<?php if (strtoupper($_SERVER['REQUEST_METHOD'])=="POST"){ $pass=$_POST['passwd']; if (password_verify($pass, "事前に生成したパスワードのhash値")){ header("Location: http://localhost/success.php"); exit(); } } header("Location: http://localhost/error.php"); ?>
以上です!
今年最初の記事なので軽めにしておきます。
次回はデータベース(Mysql)あたりをいじっていこうかなと思います!。
hashに関する記事も書いていきたいと思います!
最後までありがとうございました!