ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 8 years ago

Closed 8 years ago

#4129 closed defect (fixed)

SlavePNEでPOP3などのストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない

Reported by: imamura623 Owned by: urabe
Priority: major Milestone: OpenPNE2.14.1
Component: 指定しない Version: 2.12.x & 2.14.x
Keywords: OpenPNE2.12.14 Cc:

Description (last modified by urabe)

■現象

slavePNE を有効にした際、利用するストレージによっては、 アカウントやパスワードが正しくない場合も認証が通ってしまう。

■原因

返り値がboolではなく、オブジェクトのエラーで、それが、Trueと判断されてしまう。

■今回のバグ対象のストレージ

pop3
@return mixed true on Success/ PEAR_ERROR on error
return PEAR::raiseError
return false;
return true;

array
@return boolean|PEAR_Error Error object or boolean
return PEAR::raiseError
return false;
return true;

DB
@return mixed Error object or boolean
return PEAR::raiseError
return false;
return true;

DBLite
@return mixed Error object or boolean
return PEAR::raiseError
return false
return true

DB_osc
@return mixed Error object or boolean
PEAR::raiseError
return false
return true

File
@return mixed Error object or boolean
File_Passwd
http://pear.php.net/manual/ja/package.fileformats.file-passwd.file-passwd.staticauth.php

LDAP
@return boolean( PHPドキュメント間違い)
return PEAR::raiseError
return false
return true

MDB
mixed Error object or boolean
return PEAR::raiseError
return false
return true

MDB2
@return mixed Error object or boolean
return PEAR::raiseError
return false
return true

Multiple
@return boolean|PEAR_Error Error object or boolean
return PEAR::raiseError
return false
return true

PEAR
@return mixed Error object or boolean
return PEAR::raiseError
return true


SOAP5
return true;
return false;
PEAR::raiseError

■修正内容

返り値の型がboolで値がtrueのときのみtrueを返し、それ以外はfalseを返すように修正

■関連情報

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=21123より転機

slavePNE(POP3)認証を有効にしている場合、メールアドレス登録、変更などにおいて、どんなパスワードを入力しても認証OKとなる。

例えば、初期ログイン後メールアドレスを登録し、そのメールアドレス宛に登録完了のメールが届きます。そのメールに記載されているURLをクリックすると、メールアドレス登録画面が表示され、パスワードの入力が促されます。このパスワードに何を入れても認証がクリアしたことになる。

原因(推察)
lib/db/etc.php内のdb_common_authenticate_password関数において、返り値はfetchDataメソッドの返り値そのままを返している。

POP3認証の場合、fetchDataの返り値は、trueか、PEAR_ERRORオブジェクトである。

ところが、これを受け取るdb_member_regist_mail関数の内部では、
if (!db_common_authenticate_password($c_member_id, $password)) {
return false;
}
としている。

その為、認証エラーでPEAR_ERRORオブジェクトが帰ってきたとしても、if文では、真と判断され、処理が実行します。

対処法としては、このifの条件式を変更するなどが考えられる。

結構重要な問題なので、早めの対処を期待します。
よろしくお願いします。 

Change History (15)

comment:1 Changed 8 years ago by urabe

Owner: changed from nobody to urabe
Status: newassigned

comment:2 Changed 8 years ago by urabe

Description: modified (diff)

以下のリビジョンでコミットしました。

修正箇所

  • webapp/lib/db/etc.php
  • webapp/modules/setup/do/setup.php

comment:3 Changed 8 years ago by urabe

Description: modified (diff)

comment:4 Changed 8 years ago by urabe

Keywords: 確認中 added; 再現待ち removed

型もtrueの時だけ、trueを返すように修正しました

comment:5 Changed 8 years ago by ebihara

Keywords: 差し戻し added; 確認中 removed
  • webapp/modules/setup/do/setup.php の以下の変更で、 if の式直後にスペースがありません。 PEAR 標準コーディング規約違反です。
    if ($result !== true){ 
    

comment:6 Changed 8 years ago by urabe

Keywords: 確認中 added; 差し戻し removed

以下のリビジョンで修正しました。

if文の式のあとにスペースがなかったので追加

comment:7 Changed 8 years ago by urabe

Description: modified (diff)

comment:8 Changed 8 years ago by urabe

Description: modified (diff)

comment:9 Changed 8 years ago by urabe

Milestone: OpenPNE2.14.1

comment:10 Changed 8 years ago by kiwa

Keywords: OpenPNE2.12.14 added
Summary: メールアドレス登録、変更時のパスワード認証に不備があるSlavePNEでDB以外のストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない
Version: 2.14.x2.12.x & 2.14.x

comment:11 Changed 8 years ago by shingo

Keywords: テスト待ち added; 確認中 removed

確認しました

comment:12 Changed 8 years ago by kiwa

Keywords: 差し戻し added; テスト待ち removed

storage: POP3 の場合、1番メンバーの認証が正しく行われなくてもセットアップが完了してしまいます。

// OPENPNE_AUTH_MODE がslavepneの場合のauthオプション
$GLOBALS['_OPENPNE_AUTH_CONFIG'] =
array(
'storage'=>"POP3",
'options'=>array(
    'host' => 'xxx.example.com',
    ),
);

comment:13 in reply to:  12 Changed 8 years ago by kiwa

Keywords: テスト待ち added; 差し戻し removed

Replying to kiwa:

config.php にて、OPENPNE_AUTH_MODE の指定に誤りがありました。とりけします。

comment:14 Changed 8 years ago by urabe

Summary: SlavePNEでDB以外のストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されないSlavePNEでPOP3などのストレージを使用した場合、メールアドレス登録・変更時のパスワード認証が正しく処理されない

comment:15 Changed 8 years ago by imamura623

Keywords: テスト待ち removed
Resolution: fixed
Status: assignedclosed

動作テストし問題がないことを確認しました。
動作テストでは下記の3つのストレージについて実施しました。

  • POP3
  • array
  • DB

その他のストレージについては、ソース側でエラーをだすパターンが予測できるため確認に足りると判断しテストを省略しました。

Note: See TracTickets for help on using tickets.