最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP パスワードの暗号化(md5)
PHPで会員登録システムを作りたい。そのために必要な知識をひとつひとつ確認していこうと思っています。今回のテーマは、「パスワードの暗号化」。
情報の漏洩で一番心配しなければならないのは、内部の人間です。外部に対してどんなに強固に防衛策を講じたとしても、内部の人間に対してユーザーのデータがガラス張りになっていては、いつ情報が漏れるかわかりません。特にユーザーのパスワードの保護については、重大問題です。ユーザーのパスワードが知れた場合、そのユーザーになりすまして、いろいろなことができてしまいます。たとえユーザーリストを内部の人間が見たとしてもパスワードがわからにようにしておかなければなりません。
そこで考えなければならないのは、ユーザー情報に記載されるパスワードを暗号化しておくということです。暗号化しておけば、本当のパスワードを知ることは容易ではありません。
このようにするためには、パスワードの登録時に一定のアルゴリズムで暗号化を行い。その生成された暗号をユーザー情報として登録しておく。そして、ユーザーがログインしたときは、同じアルゴリズムでパスワードを暗号化し、ユーザー情報として登録されている暗号と照合するという方法を取る必要があります。
この一定のアルゴリズムで暗号化をする方法としては、ハッシュ関数を利用することが多く行われています。「ハッシュ」というものは、暗号から元の文字列を復元することはできないので厳密には「暗号化」とはいえないそうですが、人には推測できない文字列を生成するという意味では「暗号化」と言っても差し支えないでしょう。
PHPのハッシュ関数には、「md5」と「crypt」があります。どのハッシュ関数を利用しているかは公表しないほうがセキュリティ的にはよいのでしょうが、ここでは、簡単そうな「md5」を採用します。
「md5」は、RSA Data Security, Inc.の MD5メッセージダイジェストアルゴリズムを用いているそうです。それがどのようなアルゴリズムなのかは知りません。また、聞いても教えてくれないでしょう。ともかくmd5($str)と記述すると、32文字の16進数が返ってくるということです。
「md5」でパスワードを暗号化することができるとわかったので、さっそく前回の「PHP 入力値の無害化(htmlspecialchars,htmlentities) 」で作成したユーザー登録情報の受信部分"confirm1-1.php"を書き換えて、"confirm1-2.php"にしましょう。
[ソース]confirm1-2.php
こうしておけば、誰の目に触れることなくパスワードは暗号化されますね。パスワードが漏れるとしたら、このファイルを書き換えられる人が暗号化前にパスワードを盗み出す記述にしておいた場合でしょう。
(ユーザー本人にパスワードを聞き出す可能性やパスワードがこのファイルに届く前にネット上で盗まれる危険性もありますが・・・)
情報の漏洩で一番心配しなければならないのは、内部の人間です。外部に対してどんなに強固に防衛策を講じたとしても、内部の人間に対してユーザーのデータがガラス張りになっていては、いつ情報が漏れるかわかりません。特にユーザーのパスワードの保護については、重大問題です。ユーザーのパスワードが知れた場合、そのユーザーになりすまして、いろいろなことができてしまいます。たとえユーザーリストを内部の人間が見たとしてもパスワードがわからにようにしておかなければなりません。
そこで考えなければならないのは、ユーザー情報に記載されるパスワードを暗号化しておくということです。暗号化しておけば、本当のパスワードを知ることは容易ではありません。
このようにするためには、パスワードの登録時に一定のアルゴリズムで暗号化を行い。その生成された暗号をユーザー情報として登録しておく。そして、ユーザーがログインしたときは、同じアルゴリズムでパスワードを暗号化し、ユーザー情報として登録されている暗号と照合するという方法を取る必要があります。
この一定のアルゴリズムで暗号化をする方法としては、ハッシュ関数を利用することが多く行われています。「ハッシュ」というものは、暗号から元の文字列を復元することはできないので厳密には「暗号化」とはいえないそうですが、人には推測できない文字列を生成するという意味では「暗号化」と言っても差し支えないでしょう。
PHPのハッシュ関数には、「md5」と「crypt」があります。どのハッシュ関数を利用しているかは公表しないほうがセキュリティ的にはよいのでしょうが、ここでは、簡単そうな「md5」を採用します。
「md5」は、RSA Data Security, Inc.の MD5メッセージダイジェストアルゴリズムを用いているそうです。それがどのようなアルゴリズムなのかは知りません。また、聞いても教えてくれないでしょう。ともかくmd5($str)と記述すると、32文字の16進数が返ってくるということです。
「md5」でパスワードを暗号化することができるとわかったので、さっそく前回の「PHP 入力値の無害化(htmlspecialchars,htmlentities) 」で作成したユーザー登録情報の受信部分"confirm1-1.php"を書き換えて、"confirm1-2.php"にしましょう。
[ソース]confirm1-2.php
<?php
$usrid = htmlspecialchars($_POST["usrid"]);
$pwd = md5(htmlspecialchars($_POST["pwd"]));
$mail = htmlspecialchars($_POST["mail"]);
?>
こうしておけば、誰の目に触れることなくパスワードは暗号化されますね。パスワードが漏れるとしたら、このファイルを書き換えられる人が暗号化前にパスワードを盗み出す記述にしておいた場合でしょう。
(ユーザー本人にパスワードを聞き出す可能性やパスワードがこのファイルに届く前にネット上で盗まれる危険性もありますが・・・)
PR