NucleusでBASIC認証のパスワードを使う

プログラムに不具合があたので、一部修正しています(2008.3.28)

ウェブサイトのBASIC認証で使っている.htpasswdのファイルを、Nucleusの認証に移植したい、という要望があった。
BASIC認証とNucleusのログイン認証はパスワードの暗号化方式が違うらしく、そのまま.htpasswdに記述のある暗号化されたパスワードをデータベースにぶちこんでも、さすがにログインできない(汗)

ちなみに、.htpasswdに記述のある

ユーザ名1:暗号化されたパスワード1
ユーザ名2:暗号化されたパスワード2
ユーザ名3:暗号化されたパスワード3
   ・
   ・
   ・

というファイルを、NucleusのNP_Databaseというプラグインを使ってNucleusにぶちこむわけだが、そのへんのファイルの変換は、この記事では省略させてもらい、Nucleus側の対応方法だけをここでは述べることにする。

まず、パスワードに関する記述がありそうなファイルを探してみることに。そうしたら、
nucleus/libs/MEMBER.php
というファイルが目についた。これで間違いないだろう、ということで、さっそくパスワードに関係ありそうな記述を探してみることに。

「pass」というフレーズで検索してみると、あるわあるわ。その中で「md5」という、いかにも暗号化で使いそうな関数が目につく。そこで、まずはそのへんを修正。
修正用のプログラムの記述は、アクセス制限のパスワードを生成から拝借!

でも、あとで思ったのだけど、crypt()の第2引数がsubstr($ID, 0, 2)である必要はなさそう?
ってことは、プログラムの改変ももっと簡単に済むってこと???

417行目あたり
(修正前)
function checkPassword($pw) {
        return (md5($pw) == $this->getPassword());
}

(修正後)※不具合があったので、修正しました。(2008.3.28)
function checkPassword($pw,$id) {
        $server_pwd = $this->getPassword();
        return (crypt($pw, substr($server_pwd, 0, 2)) == $server_pwd);
}

※修正点解説(2008.3.28)
crypt()の値は、第2引数(salt)によって異なるので、.htpasswdに格納されている(ということは、データベースに格納されるべき)暗号化パスワードは、元のパスワードから一意的には決まらない。
そのへんが、わかってませんでした。ごめんなさい。

saltの値は、crypt()が返す値の最初の2文字なので、パスワードを参照するときは、入力したパスワードにsaltの値としてデータベースに格納されているパスワードの頭2文字を使って暗号化したものとするようにしました。
※修正点解説終了

446行目あたり
(修正前)
function setPassword($pwd) {
        $this->password = md5($pwd);
}

(修正後)
function setPassword($pwd,$id) {
        $this->password = crypt($pwd, substr($id, 0, 2));
}

上記2か所の記述は関数として呼び出されているようなので、呼び出し側の記述も変更。
chedkPassword()はすぐに見つかった。

75行目あたり
(修正前)
if (!$this->checkPassword($password))

(修正後)
if (!$this->checkPassword($password,$login))

で、setPassword()はどこだろう?と思って探していると、
nuclues/libs/ADMIN.php
内に発見!!

1996行目あたり、および2229行目あたり(2か所あるので注意!
(修正前)
$mem->setPassword($password);

(修正後)
$mem->setPassword($password,$name);

以上の点を修正した上で、管理画面からのパスワードの発行、パスワードの修正を試してみたところ、いずれもOKでした。
パスワードを忘れたときの再発行については、試していないのでわかりません。

しかし、$nameとすべきところを単にnameとしていて動かなかったりと、プログラムを正確に書くのって難しいなあ、などと改めて思った次第です。

2008年03月21日(金)00:19:52
カテゴリー:Why Is the Sky Blue? » Nucleus
タグ: / /

コメント

この記事のコメントはありません。









トラックバック

mbt shoes online

mbt shoes online:mbt schuhe tataga black TrackBack、ホハヨヒヘミナ
2014年07月29日 08:08:59
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.

サイト内検索


カレンダー

2020-04
  12345
6789101112
13141516171819
20212223242526
27282930   

ログイン






powered by

  • Powered by Nucleus CMS