source: branches/feature-module-update/data/class/pages/LC_Page.php @ 15113

Revision 15113, 4.5 KB checked in by nanasess, 15 years ago (diff)

トランザクションチェックの関数追加

  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/**
9 * Web Page を制御する基底クラス
10 *
11 * Web Page を制御する Page クラスは必ずこのクラスを継承する.
12 * PHP4 ではこのような抽象クラスを作っても継承先で何でもできてしまうため、
13 * あまり意味がないが、アーキテクトを統一するために作っておく.
14 *
15 * @package Page
16 * @author LOCKON CO.,LTD.
17 * @version $Id$
18 */
19class LC_Page {
20
21    // {{{ properties
22
23    /** メインテンプレート */
24    var $tpl_mainpage;
25
26    /** メインナンバー */
27    var $tpl_mainno;
28
29    /** CSS のパス */
30    var $tpl_css;
31
32    /** タイトル */
33    var $tpl_title;
34
35    /** カテゴリ */
36    var $tpl_page_category;
37
38    /**
39     * 安全に POST するための URL
40     */
41    var $postURL;
42
43    /**
44     * このページで使用する遷移先
45     */
46    var $transitions;
47
48    // }}}
49    // {{{ functions
50
51    /**
52     * Page を初期化する.
53     *
54     * @return void
55     */
56    function init() {
57        $this->postURL = $_SERVER['PHP_SELF'];
58    }
59
60    /**
61     * Page のプロセス.
62     *
63     * @return void
64     */
65    function process() {}
66
67    /**
68     * デストラクタ.
69     *
70     * @return void
71     */
72    function destroy() {}
73
74    /**
75     * 遷移元が自サイトかどうかチェックする.
76     *
77     * 遷移元が自サイト以外の場合はエラーページへ遷移する.
78     *
79     * @return void
80     */
81    function checkPreviousURI() {
82    }
83
84    /**
85     * 指定の URL へリダイレクトする.
86     *
87     * リダイレクト先 URL に SITE_URL 及び SSL_URL を含むかチェックし,
88     * LC_Page::getToken() の値を URLパラメータで自動的に付与する.
89     *
90     * @param string $url リダイレクト先 URL
91     * @return void|boolean $url に SITE_URL 及び, SSL_URL を含まない場合 false,
92     *                       正常に遷移可能な場合は, $url の URL へ遷移する.
93     */
94    function sendRedirect($url) {
95
96        if (preg_match("/(" . preg_quote(SITE_URL, '/')
97                          . "|" . preg_quote(SSL_URL, '/') . ")/", $url)) {
98
99            header("Location: " . $url . "?" . TRANSACTION_ID_NAME . "=" . $this->getToken());
100        }
101        return false;
102    }
103
104    // }}}
105    // {{{ protected functions
106
107    /**
108     * トランザクショントークンを生成し, 取得する.
109     *
110     * 悪意のある不正な画面遷移を防止するため, 予測困難な文字列を生成して返す.
111     * 同時に, この文字列をセッションに保存する.
112     *
113     * この関数を使用するためには, 生成した文字列を次画面へ渡すパラメータとして
114     * 出力する必要がある.
115     *
116     * 例)
117     * <input type="hidden" name="transactionid" value="この関数の返り値" />
118     *
119     * 遷移先のページで, LC_Page::isValidToken() の返り値をチェックすることにより,
120     * 画面遷移の妥当性が確認できる.
121     *
122     * @return string トランザクショントークンの文字列
123     */
124    function getToken() {
125        $token = $this->createToken();
126        $_SESSION[TRANSACTION_ID_NAME] = $token;
127        return $token;
128    }
129
130    /**
131     * トランザクショントークンの妥当性をチェックする.
132     *
133     * 前画面で生成されたトランザクショントークンの妥当性をチェックする.
134     * この関数を使用するためには, 前画面のページクラスで LC_Page::getToken()
135     * を呼んでおく必要がある.
136     *
137     * @return boolean トランザクショントークンが有効な場合 true
138     */
139    function isValidToken() {
140
141        $checkToken = "";
142
143        // $_POST の値を優先する
144        if (isset($_POST[TRANSACTION_ID_NAME])) {
145
146            $checkToken = $_POST[TRANSACTION_ID_NAME];
147        } elseif (isset($_GET[TRANSACTION_ID_NAME])) {
148
149            $checkToken = $_GET[TRANSACTION_ID_NAME];
150        }
151
152        $ret = false;
153        // token の妥当性チェック
154        if ($checkToken === $_SESSION[TRANSACTION_ID_NAME]) {
155
156            $ret = true;
157        }
158
159        unset($_SESSION[TRANSACTION_ID_NAME]);
160
161        return $ret;
162    }
163
164    // }}}
165    // {{{ private functions
166
167    /**
168     * トランザクショントークン用の予測困難な文字列を生成して返す.
169     *
170     * @return string トランザクショントークン用の文字列
171     */
172    function createToken() {
173        return sha1(uniqid(rand(), true));
174    }
175}
176?>
Note: See TracBrowser for help on using the repository browser.