TOOL更新_63.クロスサイトリクエストフォージェリ・・・トークンチェックを行う。
TOOL更新_63.クロスサイトリクエストフォージェリ対策として、DB追加、更新、削除の画面でトークンチェックを行う。の調査。これをPHP自動作成◎自動生成お助けTOOLのDB追加、更新、削除のボタンに反映する予定。今日は調査のみ。
■config.php 修正
!!!これはCONFIGに持つまでもないという理由でボツにした。7月22日に作り変えた!!!
<<追加>> // トークンチェックフラグ define('TOKEN_CHECK_ADMIN_FLG', true); define('TOKEN_CHECK_USER_FLG', true); // トークンチェック対象モード define('TOKEN_CHECK_MODE', 'ins_do,upd_do,del_do'); // 最終トークン保持時間(分)戻るボタンでも戻ってもこの時間内ならOK // 管理者側は登録ボタン押下後、戻るボタンで戻って違う内容で登録することができるようになる。 define('TOKEN_OK_ADMIN_TIME', 180); define('TOKEN_OK_USER_TIME', 0);
■TokenHandle.php (トークンチェッククラス)
!!!これはロジックを変更したのでボツにした。7月22日に作り変えた!!!
<?php //トークンチェッククラス class TokenHandle { // トークンHidden取得 function getTokenHtml() { // トークン作成 $latest_token = md5(uniqid(rand(),TRUE)); $_SESSION['KAZ_TOOL_token'] = $token; $_SESSION['KAZ_TOOL_token_time'] = time(); return '<input type="hidden" name="KAZ_TOOL_token" value="'. $latest_token .'" />' ; } // トークンチェック function isTokenValid($mode, $userFlg = true) { $modeMach = false; $mode_ary = explode(',', TOKEN_CHECK_MODE ); // トークンチェック対象モード配列 for($i = 0; $i < count($mode_ary); $i++) { if (trim($mode_ary[$i]) == $mode) { $modeMach = true; break; } } if (((TOKEN_CHECK_ADMIN_FLG == true && $userFlg == false) || (TOKEN_CHECK_USER_FLG == true && $userFlg == true)) && $modeMach == true) { if (isset($_SESSION['KAZ_TOOL_token']) && $_REQUEST['KAZ_TOOL_token'] == $_SESSION['KAZ_TOOL_token']) { $token_age = time() - $_SESSION['KAZ_TOOL_token_time']; if (($userFlg == false && $token_age > (TOKEN_OK_ADMIN_TIME * 60)) || ($userFlg == true && $token_age > (TOKEN_OK_USER_TIME * 60))) { // OK:トークン削除 $_SESSION['KAZ_TOOL_token'] = ''; $_SESSION['KAZ_TOOL_token_time'] = ''; } } else { return false; } return true; } // OK return true; } } ?>
■プログラムに追加
!!!これロジックを変更したという理由でボツにした。7月22日に作り変えた!!!
require_once('TokenHandle.php'); if (TokenHandle::isTokenValid($mode, true) == false) { // トークンチェックエラー場合 sendRedirectExit('/kaz01u/index.php'); exit; } <%= TokenHandle::getTokenHtml(); %>
■2度押しした場合トークンチェックエラーになってしまうので、このJavaScriptで2度押しできないようにしておく。
!!!これは処理内容変更したという理由でボツにした。7月22日に作り変えた!!!
・htmlに追加、修正 例):itemUaddConfirmView.htm_ <script type="text/javascript" src="/js/kaz.js"></script> <a href="javascript:;do_Submit_CLK2('ins_do');"><img src="/kaz01u/img/btn/btn_entry.gif" alt="登録" width="61" height="22" border="0" class="right5" /></a>
■kaz.js を新規で作成する。
!!!これは変更なし。7月22日に同じものを再度記述した。!!!
var doubleClick_flg = true; //Submit制御(DoubleClick制御あり) function do_Submit_Clk1() { if (doubleClick_flg == true) { window.setTimeout(function() { doubleClick_flg = false; }, 1); window.setTimeout(function() { doubleClick_flg = true; }, 1000); document.frm.submit(); } else { return; false; } } //Submit制御(DoubleClick制御あり) function do_Submit_Clk2(mode) { if (doubleClick_flg == true) { window.setTimeout(function() { doubleClick_flg = false; }, 1); window.setTimeout(function() { doubleClick_flg = true; }, 1000); document.frm.mode.value = mode; document.frm.submit(); } else { return; false; } }
5/24 03:00 - 06:30
5/25 10:00 - 0:30