[Svn-src-all:1492] [version-2_5-dev 20384] #812(トランザクションIDの自動生成/自動検証)

nanasess admin @ mail.ec-cube.net
2011年 2月 24日 (木) 18:40:55 JST


Subversion committed to /home/svn/open 20384
http://svn.ec-cube.net/open_trac/changeset/20384
┌────────────────────────────┐
│更新者 :  nanasess                                     │
│更新日時:  2011-02-24 18:40:55 +0900 (木, 24  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#812(トランザクションIDの自動生成/自動検証)
 * トークンの生成タイミングを POST ごとから, 1セッションごとに修正


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/SC_Customer.php
U   branches/version-2_5-dev/data/class/SC_Session.php
U   branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php
U   branches/version-2_5-dev/data/class/pages/LC_Page.php
U   branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php
U   branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php
U   branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php
U   branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_SearchCustomer.php
U   branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
U   branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php
U   branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php

変更: branches/version-2_5-dev/data/class/SC_Customer.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Customer.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/SC_Customer.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -211,6 +211,8 @@
     function EndSession() {
         // $_SESSION['customer']の解放
         unset($_SESSION['customer']);
+        // トランザクショントークンの破棄
+        SC_Helper_Session_Ex::destroyToken();
         $objSiteSess = new SC_SiteSession();
         $objSiteSess->unsetUniqId();
         // ログに記録する

変更: branches/version-2_5-dev/data/class/SC_Session.php
===================================================================
--- branches/version-2_5-dev/data/class/SC_Session.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/SC_Session.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -120,6 +120,8 @@
         unset($_SESSION['authority']);
         unset($_SESSION['member_id']);
         unset($_SESSION['uniqid']);
+        // トランザクショントークンを破棄
+        SC_Helper_Session_Ex::destroyToken();
         // ログに記録する
         GC_Utils_Ex::gfPrintLog("logout : user=".$this->login_id." auth=".$this->authority." sid=".$this->sid);
     }

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Session.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -170,15 +170,22 @@
     /**
      * トランザクショントークンの妥当性をチェックする.
      *
-     * 前画面で生成されたトランザクショントークンの妥当性をチェックする.
+     * 生成されたトランザクショントークンの妥当性をチェックする.
      * この関数を使用するためには, 前画面のページクラスで LC_Page::getToken()
      * を呼んでおく必要がある.
      *
+     * トランザクショントークンは, SC_Helper_Session::getToken() が呼ばれた際に
+     * 生成される.
+     * 引数 $is_unset が false の場合は, トークンの妥当性検証が不正な場合か,
+     * セッションが破棄されるまで, トークンを保持する.
+     * 引数 $is_unset が true の場合は, 妥当性検証後に破棄される.
+     *
      * @access protected
-     * @param boolean $is_unset TODO: nanasessさんが作り変えているらしいですが暫定対応で
+     * @param boolean $is_unset 妥当性検証後, トークンを unset する場合 true;
+     *                          デフォルト値は false
      * @return boolean トランザクショントークンが有効な場合 true
      */
-    function isValidToken($is_unset = true) {
+    function isValidToken($is_unset = false) {
 
         $checkToken = "";
 
@@ -194,16 +201,24 @@
         $ret = false;
         // token の妥当性チェック
         if ($checkToken === $_SESSION[TRANSACTION_ID_NAME]) {
-
             $ret = true;
         }
-        if ($is_unset) {
-            unset($_SESSION[TRANSACTION_ID_NAME]);
+        if ($is_unset || $ret === false) {
+            SC_Helper_Session_Ex::destroyToken();
         }
         return $ret;
     }
 
     /**
+     * トランザクショントークンを破棄する.
+     *
+     * @return void
+     */
+    function destroyToken() {
+        unset($_SESSION[TRANSACTION_ID_NAME]);
+    }
+
+    /**
      * 管理画面の認証を行う.
      *
      * mtb_auth_excludes へ登録されたページは, 認証を除外する.

変更: branches/version-2_5-dev/data/class/pages/LC_Page.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/LC_Page.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/LC_Page.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -330,7 +330,7 @@
     /**
      * POST アクセスの妥当性を検証する.
      *
-     * 前画面で生成されたトランザクショントークンの妥当性を検証し,
+     * 生成されたトランザクショントークンの妥当性を検証し,
      * 不正な場合はエラー画面へ遷移する.
      *
      * この関数は, 基本的に init() 関数で呼び出され, POST アクセスの場合は自動的に
@@ -344,7 +344,7 @@
      */
     function doValidToken($is_admin = false) {
         if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken()) {
+            if (!SC_Helper_Session_Ex::isValidToken(false)) {
                 if ($is_admin) {
                     SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
                 } else {

変更: branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -206,19 +206,6 @@
     }
 
     /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-    */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
-    /**
      * 初期化を行う.
      *
      * @param SC_FormParam $objFormParam SC_FormParamインスタンス

変更: branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -127,19 +127,6 @@
         parent::destroy();
     }
 
-    /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                //                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
      /**
      * パラメータの初期化を行う
      * @param Object $objFormParam

変更: branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -141,19 +141,6 @@
     }
 
     /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
-    /**
      * パラメーター情報の初期化
      *
      * @param array $objFormParam フォームパラメータークラス

変更: branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_SearchCustomer.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_SearchCustomer.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_SearchCustomer.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -91,19 +91,6 @@
     }
 
     /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
-    /**
      * デストラクタ.
      *
      * @return void

変更: branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -127,19 +127,6 @@
     }
 
     /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
-    /**
      * 
      * 商品取得
      * @param array $arrProduct_id

変更: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductSelect.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -97,19 +97,6 @@
         parent::destroy();
     }
 
-    /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
     /* 取得文字列の変換 */
     function lfConvertParam() {
         /*

変更: branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php	2011-02-24 09:35:12 UTC (rev 20383)
+++ branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Payment.php	2011-02-24 09:40:55 UTC (rev 20384)
@@ -227,19 +227,6 @@
     }
 
     /**
-     * トランザクショントークンを unset しないようオーバーライド.
-     *
-     * @return void
-     */
-    function doValidToken() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken(false)) {
-                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
-            }
-        }
-    }
-
-    /**
      * パラメータの初期化を行い, 初期値を設定する.
      *
      * @param SC_FormParam $objFormParam SC_FormParam インスタンス




Svn-src-all メーリングリストの案内