[PHP-users 12536] Re: パスワード変更プログラム

北嶋宏丞 php-users@php.gr.jp
Mon, 13 Jan 2003 10:35:27 +0900


北嶋です。

大変参考になります。
ありがとうございます。

私の場合、使用しているのが、
Apache
PostgreSQL
PHP
の組み合わせなので、ちょっと変更しつつ試してみようと思います。
以上

----- Original Message -----
From: "NAKAMURA Takeshi" <1yen@sh.rim.or.jp>
To: <php-users@php.gr.jp>
Sent: Saturday, January 11, 2003 5:00 AM
Subject: [PHP-users 12513] Re: パスワード変更プログラム


> 仲村です
>
> From: NAKAMURA Takeshi <1yen@sh.rim.or.jp>
> Date: Thu, 09 Jan 2003 19:47:15 +0900
> Subject: [PHP-users 12492] Re: パスワード変更プログラム
>
> > # そのうちやりたいと思いつつ、全然調べてなかったんですが(^^;
>  と、言っていたのでやってみました。コマンドラインから変更するときは
> htpasswd ではなく dbmmanage で行うようになっています。
>
>  一番面倒だったのは FreeBSD の ports を使って dba を組み込むこと。
> 11時前から始めて、phpが出来上がったのは 20時。
> db3 のヘッダの在処を指定するのを忘れて...P133 なマシンでは辛い(笑)
>  その後 apache の dbmmanage ではまり...以下略
>
> ・以下の、/ど/こ/か は全て同じ所を指します。
> ・apache のデフォルトで .ht から始まるファイルは外部から見られないように
>   なっている為、.htpasswd というファイル名は変更しない方がいいでしょう。
>
> ○ httpd.conf(apache 1.3.x) は、こんな風にかいてます
> LoadModule db_auth_module     libexec/apache/mod_auth_db.so
> AddModule mod_auth_db.c
> <Directory "/ど/こ/か">
>    AuthType Basic
>    AuthName "Auth Auth Auth"
>    AuthDBUserFile /ど/こ/か/.htpasswd.db
>    Require user nakamura
> </Directory>
>
> ○ chpasswd.php
> <?php
> # Apache Basic認証用 パスワード変更スクリプト
> #
> # このスクリプトは apache の dbmmanage と共生できます
> # ただし、db の形式は ndbm となりますので dbmmanageで
> # ndbm を優先して作らせるために dbmmanage 69行目あたりを
> # BEGIN { @AnyDBM_File::ISA = qw(NDBM_File GDBM_File SDBM_File DB_File)}
> # と、書き換えないと動作しないかもしれません。
> #
> #
> # このスクリプトは login しているユーザを確認する必要があるため
> # 認証の内側に置いておくこと
> #
> # NAKAMURA Takeshi <1yen@sh.rim.or.jp>
> #
> # HTPASSWDFILE: 実際のファイル名から拡張子 .db を外してください。
> # SUPERUSER:    ここにかかれているユーザは、他人のパスワードを
> #               変更することが可能
> #
> define("HTPASSWDFILE", "/home/ossan/public_html/mokushi/.htpasswd");
> define("SUPERUSER", "AdMiN");
>
> if (!function_exists('dba_open')) {
> echo "Error: <br>\n",
> "&nbsp;&nbsp;このphpは DBA関数が使用できるように",
> "コンパイルされていません<br><br>\n",
> '<a
href="http://jp2.php.net/manual/ja/install.configure.php#install.configure.o
ptions.databases"',
> ">configureスクリプトのオプション</a>を参考に dba で",
> "ndbm が扱えるようにコンパイルしなおしてください。<br>\n",
> 'dba関数については<a href="http://jp2.php.net/manual/ja/ref.dba.php">',
> "dba関数について</a>を御覧ください。<br>\n";
> exit;
> }
>
> function chenge_password ($uname, $pass, $db_handle){
> # 本人 or SuperUser でloginしている場合のみ変更可能
> if ($_SERVER["PHP_AUTH_USER"] != $uname and
> $_SERVER["PHP_AUTH_USER"] != SUPERUSER){
> echo "$uname のパスワードを変更する権限がありません<br>\n";
> }
>
> # パスワードの sha1 ハッシュ化
> # sha1関数がある場合(php 4.3.0 以降)は sha1 でハッシュ化
> # mhash関数がある場合は、mhash関数にて sha1 でハッシュ化
> # いずれも無い場合は、md5にてハッシュ化
> if (function_exists('sha1')) {
> $pass = "{SHA}" . base64_encode(sha1($pass));
> }else{
> if (function_exists('mhash')){
> $pass = "{SHA}" . base64_encode(mhash(MHASH_SHA1, $pass));
> }else{
> # $1$ のままでも認証は通るようなので $apr1$ へ変換はあきらめる
> $salt = substr(md5(microtime()), 0, 9);
> $pass = crypt($pass, '$1$' . $salt);
> }
> }
>
> # DBへ更新
> if(dba_replace($uname, $pass, $db_handle)){
> echo "パスワードの更新が完了しました<br>\n",
> "新しいパスワードで login しなおしてください<br>\n";
> }else{
> echo "パスワードの更新に失敗しました<br>\n",
> "再度、試すか管理者へ連絡してください。<br>\n";
> }
> }
> ?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html lang="ja-JP">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
> <title>パスワードの変更</title>
> </head>
> <body>
> <form method="post">
> &nbsp; ユ ー ザ 名 &nbsp; : <input type="text" name="uname"><br>
> &nbsp;パ ス ワ ー ド : <input type="password" name="pass"><br>
> 確認のため再入力: <input type="password" name="pass2"><br>
> <input type=submit value="変更">
> </form>
> <?php
> # パスワードが入力されていないときは何も実行しない
> if ($_POST['uname'] == "" or $_POST['pass'] == "") exit;
>
> $umame = $_POST['uname'];
> $pass  = $_POST['pass'];
> $pass2 = $_POST['pass2'];
>
> if ($pass != $pass2) die("パスワードが合いません<br>\n再度入力ください
<br>\n");
>
> $db_handle = dba_open (HTPASSWDFILE, "n", "ndbm");
> chenge_password($uname, $pass, $db_handle);
> dba_close ($db_handle);
> ?>
> </body>
> </html>
>
=========8<========8<========8<========8<========8<========8<========8<====
>  関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
>  仲村 武 <1yen@sh.rim.or.jp>
> # 変なところがあったら、突っ込んでやって下さい。
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
>