脆弱性

認可回避の脆弱性

  • 情報公開日:2014年 01月 21日
  • 危険度:
  • 対象:Ver 2.11.0~2.12.2
-------------------------------------------------------------------
■脆弱性の種類
-------------------------------------------------------------------
認可回避の脆弱性

-------------------------------------------------------------------
■不具合が存在するEC-CUBEのバージョン
-------------------------------------------------------------------
EC-CUBE 2.11.0~2.12.2
	 2.11.0
	 2.11.1
	 2.11.2
	 2.11.3
	 2.11.4
	 2.11.5
	 2.12.0
	 2.12.1
	 2.12.2
 
-------------------------------------------------------------------
■修正方法について
-------------------------------------------------------------------

/data/class/pages/shopping/LC_Page_Shopping_Multiple.php::lfCheckError
に以下の変更を加えます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
=================================================================================================================
▽2.12.0以上のバージョンは以下を参考下さい
-----------------------------------------------------------------------------------------------------------------
▽LC_Page_Shopping_Multiple.php::lfCheckError
221行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objCartSess = new SC_CartSession_Ex();

    $objFormParam->convParam();
    // 数量未入力は0に置換
    $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0));

    $arrErr = $objFormParam->checkError();

    $arrParams = $objFormParam->getSwapArray();

    if (empty($arrErr)) {
        foreach ($arrParams as $index => $arrParam) {
            // 数量0で、お届け先を選択している場合
            if ($arrParam['quantity'] == 0 && !SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。';;
            }
            // 数量の入力があり、お届け先を選択していない場合
            if ($arrParam['quantity'] > 0 && SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ お届け先が入力されていません。';
            }
        }
    }
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objCartSess = new SC_CartSession_Ex();
    $objQuery    =& SC_Query_Ex::getSingletonInstance();
    $objCustomer = new SC_Customer_Ex();

    $objFormParam->convParam();
    // 数量未入力は0に置換
    $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0));

    $arrErr = $objFormParam->checkError();

    $arrParams = $objFormParam->getSwapArray();

    if (empty($arrErr)) {
        foreach ($arrParams as $index => $arrParam) {
            // 数量0で、お届け先を選択している場合
            if ($arrParam['quantity'] == 0 && !SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。';;
            }
            // 数量の入力があり、お届け先を選択していない場合
            if ($arrParam['quantity'] > 0 && SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ お届け先が入力されていません。';
            }
        }
    }

    if ($objCustomer->isLoginSuccess(true) && SC_Utils_Ex::isBlank($arrErr)) {
        $deliv_check_flg = true;
        foreach ($arrParams as $index => $arrParam) {
            if ($arrParam['shipping'] != 0) {
                $deliv_check = $objQuery->count('dtb_other_deliv','other_deliv_id = ? AND customer_id = ?', array($arrParam['shipping'], $objCustomer->getValue('customer_id')));
                if ($deliv_check < 1) {
                    $deliv_check_flg = false;
                    break;
                }
            }
        }

        if (!$deliv_check_flg) {
            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true);
            SC_Response_Ex::actionExit();
        }
    }
=================================================================================================================
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
=================================================================================================================
▽2.11.2~2.11.5のバージョンは以下を参考下さい
-----------------------------------------------------------------------------------------------------------------
▽LC_Page_Shopping_Multiple.php::lfCheckError
210行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objCartSess = new SC_CartSession_Ex();

    $objFormParam->convParam();
    // 数量未入力は0に置換
    $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0));

    $arrErr = $objFormParam->checkError();

    $arrParams = $objFormParam->getSwapArray();

    if (empty($arrErr)) {
        foreach ($arrParams as $index => $arrParam) {
            // 数量0で、お届け先を選択している場合
            if ($arrParam['quantity'] == 0 && !SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。';;
            }
            // 数量の入力があり、お届け先を選択していない場合
            if ($arrParam['quantity'] > 0 && SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ お届け先が入力されていません。';
            }
        }
    }
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objCartSess = new SC_CartSession_Ex();
    $objQuery    =& SC_Query_Ex::getSingletonInstance();
    $objCustomer = new SC_Customer_Ex();

    $objFormParam->convParam();
    // 数量未入力は0に置換
    $objFormParam->setValue('quantity', $objFormParam->getValue('quantity', 0));

    $arrErr = $objFormParam->checkError();

    $arrParams = $objFormParam->getSwapArray();

    if (empty($arrErr)) {
        foreach ($arrParams as $index => $arrParam) {
            // 数量0で、お届け先を選択している場合
            if ($arrParam['quantity'] == 0 && !SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ 数量が0の場合、お届け先を入力できません。';;
            }
            // 数量の入力があり、お届け先を選択していない場合
            if ($arrParam['quantity'] > 0 && SC_Utils_Ex::isBlank($arrParam['shipping'])) {
                $arrErr['shipping'][$index] = '※ お届け先が入力されていません。';
            }
        }
    }

    if ($objCustomer->isLoginSuccess(true) && SC_Utils_Ex::isBlank($arrErr)) {
        $deliv_check_flg = true;
        foreach ($arrParams as $index => $arrParam) {
            if ($arrParam['shipping'] != 0) {
                $deliv_check = $objQuery->count('dtb_other_deliv','other_deliv_id = ? AND customer_id = ?', array($arrParam['shipping'], $objCustomer->getValue('customer_id')));
                if ($deliv_check < 1) {
                    $deliv_check_flg = false;
                    break;
                }
            }
        }

        if (!$deliv_check_flg) {
            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true);
            exit;
        }
    }
=================================================================================================================
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
=================================================================================================================
▽2.11.0~2.11.1のバージョンは以下を参考下さい
-----------------------------------------------------------------------------------------------------------------
▽LC_Page_Shopping_Multiple.php::lfCheckError
209行目付近を変更下さい。
-----------------------------------------------------------------------------------------------------------------
 変更前
-----------------------------------------------------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objFormParam->convParam();
    return $objFormParam->checkError();
}
-------------------------------------------------------------------

-------------------------------------------------------------------
 変更後
-------------------------------------------------------------------
function lfCheckError(&$objFormParam) {
    $objQuery    =& SC_Query_Ex::getSingletonInstance();
    $objCustomer = new SC_Customer_Ex();
    $objFormParam->convParam();
    $arrErr = $objFormParam->checkError();

    $arrParams = $objFormParam->getSwapArray(array('shipping'));
    
    if ($objCustomer->isLoginSuccess(true) && SC_Utils_Ex::isBlank($arrErr)) {
        $deliv_check_flg = true;
        foreach ($arrParams as $index => $arrParam) {
            if ($arrParam['shipping'] != 0) {
                $deliv_check = $objQuery->count('dtb_other_deliv','other_deliv_id = ? AND customer_id = ?', array($arrParam['shipping'], $objCustomer->getValue('customer_id')));
                if ($deliv_check < 1) {
                    $deliv_check_flg = false;
                    break;
                }
            }
        }

        if (!$deliv_check_flg) {
            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true);
            exit;
        }
    }
    
    return $arrErr;
}
=================================================================================================================

EC-CUBE公式アドバイザー
ご相談窓口

  • 他社のASPやパッケージとの違いを知りたい
  • BtoCのサイトにBtoB機能を追加したい
  • 何から手をつければよいかわからない
  • オープンソースならではの注意事項を知りたい
  • 自社にマッチした制作会社を探したい
  • サイト制作だけでなく運営もサポートしてほしい

新規構築・リニューアル・取引先向けのWeb受発注システム(BtoB)や事業の拡大など、
今抱えている課題を解決する最適な業者探しを、アドバイザーがお手伝いします。