dポイントプレゼントキャンペーン実施中!

パスワードの認証について質問です。正常に動いているのは確認しました。
フォームから受け取ったパスワードをサタニサイズ等をし、データベースで認証する前に認証のテストをしてみようかと思い、下記のように書いてみたのですが、これって意味ありますか?
if($_POST['password']=='et って直接書いてあるしバレバレなのかな~と思ったのですが、どうでしょうか?
ほかにもっとよいコードの書き方があれば教えてください。


if($_POST['password']=='et')
{
if(password_verify($password,$pass) ){
echo "一致しました。";
}}else {
{echo "一致してません";}
}

質問者からの補足コメント

  • ありがとうございます。

    https://segateway.com/archives/529
    こちらのぺーじの下記のコードは有効だと思いますか?


    <?php
    $passwd = "password";
    $passwd_hash = password_hash($passwd,PASSWORD_DEFAULT);

    echo $passwd_hash;

    if(password_verify($passwd,$passwd_hash) ){
    echo "<div>一致しました。</div>";
    }else{
    echo "<div>一致してません。</div>";
    }
    ?>

      補足日時:2021/02/02 14:13

A 回答 (2件)

補足のページのコードはスタンダードに有効なものです。


必要であればオプションでcost指定することです。
http://phpspot.net/php/man/php/function.password …

コストのデフォルトは10ですが、上げることによって
より複雑なハッシュを生成しますが、ハードウェアパフォーマンスが
必要になります。
ひとまずはコストはいじらず、デフォルトのまま学習してみては。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2021/02/02 15:56

最初のif()は意味ありません。



DBで管理していることを前提に考えた時、
最初のif()は、DBに管理されているプレーンなパスワード、もしくは
可逆性のあるパスワードを復号化したものを突合することになります。
それはどちらもセキュリティ上ヨシとされるものではありません。

password_verify()によってDBに管理されている不可逆なパスワードと
突合して認証を行うことだけで事が済みます。
勿論、そのパスワードはpassword_hash()によって生成されたもの
であることが前提です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!