プロジェクト

全般

プロフィール

Bug(バグ) #2647

Yuya Watanabe さんが約13年前に更新

h3. 概要 

 携帯個体識別番号の登録を必須にしても,メールアドレスを変えると同一の個体識別番号でも何度も登録が出来てしまう. 
 OpenPNE 2 系では新規登録時に携帯の個体識別番号の重複登録は認められていないため,OpenPNE 3 でも同様の処理を行う必要がある. 

 h3. 原因 

 下記コードで個体識別番号が必須の場合に個体識別番号がリクエストで渡されているかのチェックとブラックリストに登録されているかのチェックは行われているが,登録しようとしている個体識別番号がすでに存在しているかどうかのチェックが行われていない. 

 lib/form/opAuthRegisterForm.class.php  
 <pre> 
 129     public function validateMobileUID($validator, $values, $arguments = array()) 
 130     { 
 131       if (!opConfig::get('retrieve_uid')) 
 132       { 
 133         return $values; 
 134       } 
 135  
 136       if (sfConfig::get('app_is_mobile', false)) 
 137       { 
 138         $request = sfContext::getInstance()->getRequest(); 
 139         $uid = $request->getMobileUID(false); 
 140         if (!$uid && opConfig::get('retrieve_uid') >= 2) 
 141         { 
 142           throw new sfValidatorError($validator, 'A mobile UID is required. Please check settings of your mobile phone and retry.'); 
 143         } 
 144         elseif (Doctrine::getTable('Blacklist')->retrieveByUid($uid)) 
 145         { 
 146           throw new sfValidatorError($validator, 'A mobile UID is invalid.'); 
 147         } 
 148  
 149         $cookieUid = sfContext::getInstance()->getResponse()->generateMobileUidCookie(); 
 150         if ($cookieUid) 
 151         { 
 152           $values['mobile_cookie_uid'] = $cookieUid; 
 153         } 
 154  
 155         $values['mobile_uid'] = $uid; 
 156       } 
 157  
 158       return $values; 
 159     } 
 </pre> 

 h3. 修正案 

 すでに登録されている個体識別番号を登録しようとしたときに例外を投げるように修正. 

 <pre> 
 diff --git a/apps/mobile_frontend/i18n/messages.ja.xml b/apps/mobile_frontend/i18n/messages.ja.xml 
 index 7a64c1e..b29ff74 100644 
 --- a/apps/mobile_frontend/i18n/messages.ja.xml 
 +++ b/apps/mobile_frontend/i18n/messages.ja.xml 
 @@ -1235,6 +1235,10 @@ 
          <source>Block access from the selected member with input MemberID.&lt;br /&gt; MemberID is written at the end of member top page URL.&lt;br /&gt; ex. The MemberID is 1 when the URL "http://sns.example.com/member/1"</source> 
          <target>メンバーIDを入力して特定のメンバーからのアクセスをブロックします。&lt;br /&gt;メンバーIDは相手トップページのURL末尾に表示されています。&lt;br /&gt;例:"http://sns.example.com/member/1" というURLである場合にはメンバーIDは1になります。</target> 
        </trans-unit> 
 +        <trans-unit id=""> 
 +          <source>A mobile UID was already registered.</source> 
 +          <target>その携帯電話の個体識別番号はすでに登録されています。</target> 
 +        </trans-unit> 
      </body> 
    </file> 
  </xliff> 
 diff --git a/lib/form/opAuthRegisterForm.class.php b/lib/form/opAuthRegisterForm.class.php 
 index eea1713..57686f3 100644 
 --- a/lib/form/opAuthRegisterForm.class.php 
 +++ b/lib/form/opAuthRegisterForm.class.php 
 @@ -145,6 +145,10 @@ abstract class opAuthRegisterForm extends BaseForm 
        { 
          throw new sfValidatorError($validator, 'A mobile UID is invalid.'); 
        } 
 +        elseif (Doctrine::getTable('MemberConfig')->retrieveByNameAndValue('mobile_uid', $uid)) 
 +        { 
 +          throw new sfValidatorError($validator, 'A mobile UID was already registered.'); 
 +        } 
 
        $cookieUid = sfContext::getInstance()->getResponse()->generateMobileUidCookie(); 
        if ($cookieUid) 
 </pre> 


 h3. 元記事 

 http://sns.openpne.jp/communityTopic/7794 より転記 

 <pre> 
 お世話になります。 
 OpenPNE3.6.0を利用しております。 
 管理画面から『携帯個体識別番号の登録を必須にする』を設定しておりますが、メールアドレスを変えれば同一の固体識別番号でも何度も登録が出来てしまうようです。 
 特定のファイルを少し修正すれば固体識別番号の重複が防げそうですが、あまりにもファイル数やディレクトリ構造が複雑すぎて自力で出来そうもありません。 
 どなたか複アカの防止が出来る方、ご教示頂けると幸いです。 
 よろしくお願い致します。 
 PHP 5.2.17 
 MySQL 5.5.17 
 linux 
 </pre>

戻る