■現象
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の条件式を変更するなどが考えられる。
結構重要な問題なので、早めの対処を期待します。
よろしくお願いします。