phpのパスワードのハッシュ化について
- phpで会員サイトの作成を学習しています。入力フォームにユーザーの情報を入力してもらい、データベースに格納する際、パスワードをハッシュ化する必要があります。
- PHP5.5.15を使用している場合、password_hash関数を使用することが推奨されています。
- また、ハッシュ化されたパスワードの認証は、ログイン画面でユーザーが入力したパスワードをハッシュ化して、データベースに保存されたハッシュ化されたパスワードと比較することで行われます。
- ベストアンサー
phpのパスワードのハッシュ化について
phpで会員サイトの作成を学習しています。 PDOを使用してMysqlサーバーに接続しています。 開発環境はxamppでphp Version 5.5.15を使用しています。 入力フォームにユーザーの情報を入力してもらい、 データベースに格納する際、 基本的なセキュリティ要件として パスワードをハッシュ化する必要があるということを こちらのサイトで(http://php.net/manual/ja/faq.passwords.php) 知りました。 ハッシュ化については初耳で、いまいちハッシュアルゴリズムの種類による違い等はまだ理解しきれていないのですが、 PHP5.5.15を使用しているので、パスワードのハッシュアルゴリズムは 上記サイトに載っているようにpassword_hashを使用するのが今のところ最善なのでしょうか? また、ハッシュ化されたパスワードの認証についてですが、 ログイン画面でパスワードを認証する際、 ユーザーが入力したパスワードをハッシュ化して 該当レコードのハッシュ化されて保存されたパスワードと 同じであれば認証が成功するという認識で正しいでしょうか? ご回答、よろしくお願いします。
- mmm5orz
- お礼率69% (45/65)
- PHP
- 回答数1
- ありがとう数10
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>> password_hashを使用するのが今のところ最善なのでしょうか? はい。 >> ユーザーが入力したパスワードをハッシュ化して >> 該当レコードのハッシュ化されて保存されたパスワードと >> 同じであれば認証が成功するという認識で正しいでしょうか? はい。但し、もう一度password_hash関数にかけてしまうと検証に失敗します。 md5やsha1といったものと異なり、この関数で生成されるものには「初期化ベクトル」というものが絡みます。初期化ベクトルは毎回ランダムに設定されるので、生成されるハッシュも異なります。これにより、レインボーテーブル( http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB ) に対して強力な対策が実現出来ているわけです。 ただこれだと「どうやって認証すればいいの?」という疑問が沸いてくると思います。心配無用、初期化ベクトルはちゃんと生成したハッシュの一部に含まれています(「$」区切り)。「初期化ベクトルってバレていいの?」という疑問もあると思いますが、不可逆なハッシュアルゴリズムを用いているので、特に問題はありません。 「初期化ベクトルを記録されたものに固定してハッシュ化→比較」という処理はpassword_verify関数が行ってくれるので、これを利用しましょう。
関連するQ&A
- パスワードのハッシュ化について
ユーザー登録させるようなwebサイトを作ることになりました。 ググッたところパスワードはハッシュ化させDBへ、っていうのが通常らしいんで、 sha256を使って変換しようと思います。 質問(1)ハッシュ化させる元の文字列には文字数など何か制限はないんでしょうか。 質問(2)ハッシュ化させるときにくっつけるsaltは何桁くらいにするのが一般的なんでしょうか。 教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- パスワードハッシュ化時の乱数のsaltについて
パスワードのハッシュ化について | http://okwave.jp/qa/q6377700.html で質問したものです。 ユーザー登録するwebサイトを構築する予定です。パスワードはsaltをつけてsha256でハッシュ化して保存しようと思っています。 saltはランダムにしたほうが良いとの情報を得ましたが、ログイン認証をする際にそのsaltがわからなければならないと思います。ランダムなsaltはDBに保存してしまうんでしょうか?それとも他の項目(登録日時など)をキーにハッシュ化したものを使う、とかですかね? ランダムなsaltの管理方法を教えてください。 ※ asp.net(C#)とoracleで構築予定です。
- ベストアンサー
- その他(プログラミング・開発)
- LinuxOSのユーザ・パスワードを元にPHPで認証を行うには?
LinuxOSのユーザ・パスワードを元にPHPで認証を行うには? 曖昧なタイトルで申し訳ありません. 環境は以下の通りです. CentOS5.4 Apache 2.2 PHP 5 MySQL5 現在,LinuxOSに存在するユーザ毎にウェブベースのコントロールパネルを設けたいため,ユーザ認証を掛けたいと思っているのですが,どのような方法で認証を実装すれば,LinuxOSで使用されている/etc/passwdと/etc/shadowを元にした認証が可能なのか分からず,質問させていただきました. 流れとしては以下の通りです. ユーザ名・パスワードを入力 → ユーザが存在しなかったりパスワードが違えば認証拒否 ↓ Linuxにユーザが存在していて,且つシステムパスワードと一致すれば承認. この認証はPAM認証(?)で可能でしょうか? また,そうであれば,PHPからPAM認証を行うには,どのような環境整備が必要でしょうか? 参考サイトでもかまいませんので,ご教授いただけると幸いです. よろしくお願いします.
- ベストアンサー
- PHP
- パスワードをハッシュにしてDBに収納って無意味では
PHPとMySQLを勉強中のものです。 教科書本の中でサイトへのログインパスワードなどは、ハッシュにするなどしてデータベースに入れた方が安全だとありました。 ハッシュにするというのは今では当たり前のようですが、これって意味あるのかな?という疑問もあります。 おそらくデータベースがハッキングされるなどして覗かれた時にパスワードを漏らさないためだと思うんですが、そもそもデータベースがハッキングされてる時点で終わってますよね? サイトへのログインなんてしなくても、直接データベースを触れる状態なんだから、ログインパスワードなんて必要ないと思うんですが…。 データベースそのもののパスワードをハッシュ化してどこかに収納するというなら分かるんですが、データの一部でしかないログインパスワードをハッシュ化して意味あるんでしょうか?
- 締切済み
- その他(プログラミング・開発)
- ユーザーパスワードのDBの格納について
あるメーカーのソフトウェアを使用しており、Webからログインするときのユーザ名、パスワードがユーザーデータベースのテーブルに平文で格納されています。 そのソフトで使用しているデータベースはSQL Server 2008R2になります。 平文で格納されているのが気になっており、SQL Server 2008R2を使用してテーブルに格納するパスワードをハッシュ+ソルト+ストレッチングして格納すること仕組みとして可能かどうか気になっております。 もし仕組みとして可能な場合、Webからログインした際にユーザーが入力したパスワードをハッシュ+ソルト+ストレッチングして、テーブルに格納されているハッシュ+ソルト+ストレッチングしたパスワードと比較して認証を行うようにプログラミングは可能でしょうか。
- ベストアンサー
- SQL Server
- PHPの認証方法
こんばんわ, 現在自分のサイトをすこし変更してPostgresを使用したユーザとパスワード認証をしようと思っています。 具体的にはHTMLのuserとpasswordのフォームから入力されたものをpostgresのmemberのテーブルにあるuserとpasswordと認証させ,あっていれば,自分のサイトの中に入れるようにしたいのです。 それで,.htaccess認証ではなく,PHPLIBのなかの認証(インライン認証)を使用したいのですが, (http://www.php.gr.jp/php/phplib/documentation-3.html#ss3.9) これだとネット上をpasswordなどが平文でながれるような感じがするのですが,大丈夫なのでしょうか。 また上記のように,HTML上のフォームからサーバーのDBの認証をおこなうのには,他にどのような方法があるのでしょうか。 ちなみにPHPをHTMLの中に埋め込んで作成したいと思っています。 環境はApache,PostgreSQL,PHP4です。 よろしくお願いします。
- ベストアンサー
- PHP
- PHPでパスワード認証
PHPでパスワード認証をしたいです。 パスワードは、複数あり、テキストボックスにそのどれかが入力されてログインボタンを押すと、パスワードが一致していれば、ログインを許可します。 認証のセッションは、クッキーに記憶して、一定期間有効にしたいです。 また、パスワードは適宜増える可能性があります。 宜しくお願いします。
- ベストアンサー
- PHP
- 【php】PEARのAUTHがうまくいかない。
【php】PEARのAUTHがうまくいかない。 http://www.phpbook.jp/pear/pear_auth/ このサイトを見ながら auth の実験をやってるのですが、 どうやっても、 認証できません。 何が原因と考えられるでしょうか? $dns 設定は PEAR::isError($dns) にかけてみたところ うまく通ったので問題ないと思います。 データベースには user user pass 179ad45c6ce2cb97cf1029e212046e81 (testpass) と、ユーザーネームと、ハッシュしたパスワード値を入れています。 念のためにに、両方ハッシュしたのや、両方ハッシュしてないのも入れてます。 authライブラリは、xamppに最初から入ってたやつを使ってます。 ブラウザは firefox で確認しています。 カラム名や、DB名のつづり間違いとか、 設定位置間違いとかも 何度も確認しているので間違いないと思います。 パラメータは こんな感じです $params = array( "dsn" => "mysql://dbID:dbpass@ IP /dbname", 'table' => 'test__main', 'usernamecol' => 'test_us_id ', 'passwordcol' => 'test_us_pw', 'cryptType' => 'MD5', 'db_fields' => '*' ); エディタの文字コードはUTF-8です。DBの文字コードもUTF-8です。 認証ができないだけで、phpにエラーはありません。 mysql の バージョンは 5.1.22-rc-log php の バージョンは 5.2.4 もはや何が原因か思いつきません。 何が原因と考えられるでしょうか・・・。
- ベストアンサー
- PHP
- パスワードファイルの管理
PHPに限ったことではないですが、 サイトのユーザー認証で、入力されたID,passwordとサーバー上のパスワードファイルを照合させるとします。 そのパスワードファイルをpasswd.logとかにするとweb上でダウンロード出来てしまいますが、出来ないようにするにはどうしたらいいでしょうか? よろしくお願いします。
- 締切済み
- PHP
- パスワード認証(Basic認証ではない方法)
PHPを使って施設の訪問予約システムを作ろうと思っています。 まず最初のページにユーザー名とパスワードを入力する認証画面を 作ろうと思います。 その際、この認証に成功しても、施設の管理者側(複数名いる)、利用者それぞれ異なったページへ移動させたいのですがどのようにすればよいのでしょうか? データベースを使わずにやりたいのですが、PHP初心者のためよくわかりません。 またサンプルのあるサイトがあればぜひそのURLを教えてください。
- 締切済み
- PHP
お礼
非常にわかりやすくご説明頂き、ありがとうございます! 無事、パスワードのハッシュ化とハッシュ化したパスワードの認証ができました!