昨日、ハッシュ化について学習したので、共有する
ハッシュ化とは、パスワードをハッシュ化し、第三者にパスワードがわからない
ようにするための方法である
今回は主にPHPのlogin時にパスワードがわからないようにするためにPHPで作成した。
コードの記入方法
vsコード中に(仮)password.php
$s = "test1";
echo password_hash($s, PASSWORD_DEFAULT);
を作成し、
URLに「localhost」→「保存ファイル名」「〜〜.php」で確認すると
「 $2y$10$XDqnwCgKg3IVqbv.cs/tkuU/RI0usl8Sa7NvVm8JU6zYp0kMNA9Py 」
のような話パスワードが確認できる。
パスワードのコピーを行い、(私は)PHP MY Adminのパスワードカラムにハッシュ化したものを貼り付けた。
loginページに移動後、「username」,「test1」を入力すると、loginその他のlogin機能の実装がうまく
行っていれば、成功すると思います。
ーーーーーーーーーーーーーーーーーーーーー
データベースに直接ハッシュ化する方法
SQLに登録する場合は
①データ接続
②ポストデータを取得する。
③データを登録するSQL
④バインドパラムでセットする
⑤SQL実行
だが
②ポストデータを取得するの箇所をハッシュ化することによりうまく行く
//login_pwをハッシュ化するため$login_pw_nomalを作成する
$login_pw_nomal = $_POST["login_pw"];
//ハッシュ化するため関数を作成
function hh($s){
return password_hash($s, PASSWORD_DEFAULT);
}
//ハッシュ化した関数と$login_pw_nomalを合わせる
$login_pw_hash = hh($login_pw_nomal);
// データを登録するSQL
//prepareメソッドでSQL文を準備し、$stmtの変数へ入れる。
$stmt = $pdo->prepare('INSERT INTO users(name, login_id,login_pw)
VALUES(:name, :login_id, :login_pw)');
// バインドパラムでセット。name,login_id,login_pwを作成
//bindParamでパラメータに値($name,$login_id,login_pw,login_pw_hash)をセット
$stmt->bindParam( ':name', $name, PDO::PARAM_STR);
$stmt->bindParam( ':login_id', $login_id, PDO::PARAM_STR);
$stmt->bindParam( ':login_pw', $login_pw_hash, PDO::PARAM_STR);
// SQL実行
$res = $stmt->execute();
$stmt->bindParam( ':login_pw', $login_pw_hash, PDO::PARAM_STR);
の「 PDO::PARAM_STR 」がなぜSTRなのか???
「 PDO::PARAM_STR」 」
SQL CHAR, VARCHAR, または他の文字列データ型を表します。
「 PDO::PARAM_INT 」
SQL INTEGER データ型を表します
ハッシュ化は数値だけでなく、文字列も入ってくるため、「 INT ではなく STR 」を使用する。