Changeset 22924


Ignore:
Timestamp:
2013/06/29 23:45:03 (11 years ago)
Author:
Seasoft
Message:

#2285 (POSTの場合にトークンチェックを行う一方で、GETでも処理される部分がある)
#2044 (無駄な処理を改善する for 2.13.0)

  • LC_Page#getMode を簡素に。
Location:
branches/version-2_13-dev/data/class/pages
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/pages/LC_Page.php

    r22857 r22924  
    7474    var $plugin_activate_flg = PLUGIN_ACTIVATE_FLAG; 
    7575 
     76    /** POST に限定する mode */ 
     77    var $arrLimitPostMode = array(); 
    7678    /** 
    7779     * Page を初期化する. 
     
    115117    function process() 
    116118    { 
     119        // POST に限定された mode か検証する。 
     120        $this->checkLimitPostMode(); 
    117121    } 
    118122 
     
    369373     * リクエストパラメーター 'mode' を取得する. 
    370374     * 
    371      * 1. $_GET['mode'] の値を取得する. 
    372      * 2. 1 が存在しない場合は $_POST['mode'] の値を取得する. 
    373      * 3. どちらも存在しない場合は null を返す. 
     375     * 1. $_REQUEST['mode'] の値を取得する. 
     376     * 2. 存在しない場合は null を返す. 
    374377     * 
    375378     * mode に, 半角英数字とアンダーバー(_) 以外の文字列が検出された場合は null を 
     
    377380     * 
    378381     * @access protected 
    379      * @return string $_GET['mode'] 又は $_POST['mode'] の文字列 
     382     * @return string|null $_REQUEST['mode'] の文字列 
    380383     */ 
    381384    function getMode() 
     
    383386        $pattern = '/^[a-zA-Z0-9_]+$/'; 
    384387        $mode = null; 
    385         if (isset($_GET['mode']) && preg_match($pattern, $_GET['mode'])) { 
    386             $mode =  $_GET['mode']; 
    387         } elseif (isset($_POST['mode']) && preg_match($pattern, $_POST['mode'])) { 
    388             $mode = $_POST['mode']; 
     388        if (isset($_REQUEST['mode']) && preg_match($pattern, $_REQUEST['mode'])) { 
     389            $mode =  $_REQUEST['mode']; 
    389390        } 
    390391 
     
    462463        SC_Utils_Ex::sfPrintR($val); 
    463464    } 
     465 
     466    /** 
     467     * POST に限定された mode か検証する。 
     468     * 
     469     * POST 以外で、POST に限定された mode を実行しようとした場合、落とす。 
     470     * @return void 
     471     */ 
     472    function checkLimitPostMode() { 
     473        if ($_SERVER['REQUEST_METHOD'] !== 'POST' && in_array($mode = $this->getMode(), $this->arrLimitPostMode)) { 
     474            $msg = "REQUEST_METHOD=[{$_SERVER['REQUEST_METHOD']}]では実行不能な mode=[$mode] が指定されました。"; 
     475            trigger_error($msg, E_USER_ERROR); 
     476        } 
     477    } 
    464478} 
  • branches/version-2_13-dev/data/class/pages/products/LC_Page_Products_Detail.php

    r22857 r22924  
    7070        $this->arrDELIVERYDATE = $masterData->getMasterData('mtb_delivery_date'); 
    7171        $this->arrRECOMMEND = $masterData->getMasterData('mtb_recommend'); 
     72 
     73        // POST に限定する mode 
     74        $this->arrLimitPostMode[] = 'cart'; 
     75        $this->arrLimitPostMode[] = 'add_favorite'; 
     76        $this->arrLimitPostMode[] = 'add_favorite_sphone'; 
     77        $this->arrLimitPostMode[] = 'select'; 
     78        $this->arrLimitPostMode[] = 'select2'; 
     79        $this->arrLimitPostMode[] = 'selectItem'; 
    7280    } 
    7381 
Note: See TracChangeset for help on using the changeset viewer.