Changeset 15113
- Timestamp:
- 2007/07/23 19:22:28 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/data/class/pages/LC_Page.php
r15090 r15113 85 85 * 指定の URL へリダイレクトする. 86 86 * 87 * リダイレクト先 URL は自サイトである必要がある. 87 * リダイレクト先 URL に SITE_URL 及び SSL_URL を含むかチェックし, 88 * LC_Page::getToken() の値を URLパラメータで自動的に付与する. 88 89 * 89 90 * @param string $url リダイレクト先 URL 90 * @return void 91 * @return void|boolean $url に SITE_URL 及び, SSL_URL を含まない場合 false, 92 * 正常に遷移可能な場合は, $url の URL へ遷移する. 91 93 */ 92 94 function sendRedirect($url) { 93 $_SESSION['previousURI'] = $_SESSION['currentURI']; 94 Location($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)); 95 174 } 96 175 }
Note: See TracChangeset
for help on using the changeset viewer.