パスワードのフォーマットを選択可能に(LDAP互換に)

修正

(PukiWiki>1.4.6)

管理者パスワードとユーザーパスワードの保存形式を、「RFC2307および既存のLDAP実装」に準拠させました。その結果、管理者が保存方式を自由に選択(変更)できる様になりました。具体的にはMD5以外に平文、SHA-1、Unix crypt()、OpenLDAPが利用できるパスワードフォーマット全てを利用できる様になりました。

従来のMD5パスワード保存形式を使う場合は、先頭に

{x-php-md5}

を追加する必要があります。

使用できるフォーマット

保存フォーマット / scheme prefixアルゴリズムソルト(seed)
1Cleartext (平文)なし / {CLEARTEXT}無変換なし
2LDAP SSHA (sha-1 with a seed){SSHA}SHA-1あり
3LDAP SHA{SHA}SHA-1なし
4LDAP SMD5 (md5 with a seed){SMD5}MD5あり
5LDAP MD5{MD5}MD5なし
6LDAP CRYPT{CRYPT}システム依存あり
7PHP sha1()関数の出力{x-php-sha1}SHA-1なし
8PHP md5()関数の出力{x-php-md5}MD5なし
9PHP crypt()関数の出力{x-php-crypt}システム依存あり
 

使用例

 // SELECT ONE
 //$adminpass = 'pass';            // Cleartext
 //$adminpass = '{CLEARTEXT}pass'; // Cleartext
 //$adminpass = '{SSHA}B78f8i/RpNC+CyFdKLH2odaK8hlPNjlOOUUyMA=='; // SSHA 'pass'
 //$adminpass = '{SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=';              // SHA 'pass'
 //$adminpass = '{SMD5}o7lTdtHFJDqxFOVX09C8QnlmYmZnd2Qx';         // SMD5 'pass'
 //$adminpass = '{MD5}Gh3JHJBzJcaScd3wyUS8cg==';                  // MD5 'pass'
 //$adminpass = '{CRYPT}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//';      // CRYPT 'pass'
 //$adminpass = '{x-php-sha1}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'; // sha1('pass')
 //$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72';          // md5('pass')
 //$adminpass = '{x-php-crypt}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//';      // crypt('pass')

cvs-raw:UPDATING.txt.diff?r1=1.23&r2=1.24&diff_format=u に注意点を書いた通りですが、既存の管理者パスワード(MD5ハッシュ)を今後も使用する場合、先頭に '{x-php-md5}' というフォーマット宣言を付ける必要があります。

平文を除く八種類の保存フォーマットについては、強化されたmd5プラグインで生成・検証することができます。

参考文献など

メッセージ

編集や閲覧認証に使われるユーザー定義のパスワードが直打ちなので md5hashにした方がいいのではないでしょうか?
PukiWiki/1.4/ちょっと便利に/任意のページごとの閲覧・編集制限 参照

auth.php

	// ユーザリストに含まれるいずれかのユーザと認証されればOK
	if (!isset($_SERVER['PHP_AUTH_USER'])
		or !in_array($_SERVER['PHP_AUTH_USER'],$user_list)
		or !array_key_exists($_SERVER['PHP_AUTH_USER'],$auth_users)
-		or $auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW'])
+		or $auth_users[$_SERVER['PHP_AUTH_USER']] != md5($_SERVER['PHP_AUTH_PW']))
	{

pukiwiki.ini.php

/////////////////////////////////////////////////
// ユーザ定義
$auth_users = array(
-'foo' => 'foo_passwd',
-'bar' => 'bar_passwd',
-'hoge' => 'hoge_passwd',
+// ユーザ名 => パスワード(md5 hash)
+// pukiwiki.php?md5=pass のようにURLに入力し
+// MD5ハッシュにしてから記入してください。
+// 面倒ならば以下のようにどうぞ
+// ユーザ名 => md5(パスワード)
+'foo' => 'f122914144e12fa7d7b7b14cc223f671',
+'bar' => 'f53ae779077e987718cc285b14dfbe86',
+'hoge' => md5("hoge_passwd"),
);

パスワードのマルチフォーマット対応

ちょっと確認: LDAP, LDIF(LDAP Data Interchange Format), slappasswd

ちょっと確認: cryptなどのハッシュ関数


 $string_example  = 'pkwk ' .    // Hope PukiWiki-original hash
                  $admin_defined_salt . ' ' . // Site-admin original pass-phrase
                  $username . ' ' . // Username
                  $password;  // Something password
 $hash = md5($string_example);
 switch ($method) {
 case 'md5':  $hash  = $method . ':' . md5($username . $password); break;
 case 'sha1': $hash  = $method . ':' . sha1($username . $password); break;
 default: die_message('Unknown method'); break;
 }

*1 あくまで例として適当なことを言っています
*2 どっちも危なくなってきているらしい
*3 実は最初の書き込みでは気づいてなかった
*4 ここにたどり着くのに精一杯
*5 ldiff というコマンドラインツール?についてGoogleに質問した瞬間から迷走が決まっていたのかも・・・
*6 RFC2307には「その他のスキームを定義するんなら x- を付けとけ」と書いてある気がする
*7 前提として、私はPHPマニュアルにユーザーが追記したノートが、特にコメントがなければPHP Documentation Groupの資産となることを知っています(これはノートを追記しようとすると出てくる文書に明記されています)

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-09-19 (土) 19:03:46
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 2.073 sec.

SourceForge