diff --git a/adm/admin.js b/adm/admin.js index a3f4c7d64..60412fa4a 100644 --- a/adm/admin.js +++ b/adm/admin.js @@ -71,4 +71,51 @@ function delete_confirm2(msg) return true; else return false; -} \ No newline at end of file +} + +function get_ajax_token() +{ + var token = ""; + + $.ajax({ + type: "POST", + url: "./ajax.token.php", + cache: false, + async: false, + dataType: "json", + success: function(data) { + if(data.error) { + alert(data.error); + if(data.url) + document.location.href = data.url; + + return false; + } + + token = data.token; + } + }); + + return token; +} + +$(function() { + $(document).on("click", "form input:submit", function() { + var f = this.form; + var token = get_ajax_token(); + + if(!token) { + alert("토큰 정보가 올바르지 않습니다."); + return false; + } + + var $f = $(f); + + if(typeof f.token === "undefined") + $f.append(''); + + $f.find("input[name=token]").val(token); + + return true; + }); +}); \ No newline at end of file diff --git a/adm/admin.lib.php b/adm/admin.lib.php index bc1ab9fcd..fb68772d7 100644 --- a/adm/admin.lib.php +++ b/adm/admin.lib.php @@ -346,6 +346,54 @@ function order_select($fld, $sel='') return $s; } +// 불법접근을 막도록 토큰을 생성하면서 토큰값을 리턴 +function get_admin_token() +{ + $token = md5(uniqid(rand(), true)); + set_session('ss_admin_token', $token); + + return $token; +} + + +// POST로 넘어온 토큰과 세션에 저장된 토큰 비교 +function check_admin_token() +{ + $token = get_session('ss_admin_token'); + set_session('ss_admin_token', ''); + + if(!$token || !$_POST['token'] || $token != $_POST['token']) + alert('올바른 방법으로 이용해 주십시오.'); + + return true; +} + +// 관리자 페이지 referer 체크 +function admin_referer_check($return=false) +{ + $referer = trim($_SERVER['HTTP_REFERER']); + if(!$referer) { + $msg = '정보가 올바르지 않습니다.'; + + if($return) + return $msg; + else + alert($msg, G5_URL); + } + + $p = @parse_url($referer); + $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']); + + if($host != $p['host']) { + $msg = '올바른 방법으로 이용해 주십시오.'; + + if($return) + return $msg; + else + alert($msg, G5_URL); + } +} + // 접근 권한 검사 if (!$member['mb_id']) { diff --git a/adm/ajax.token.php b/adm/ajax.token.php new file mode 100644 index 000000000..f6a100a1f --- /dev/null +++ b/adm/ajax.token.php @@ -0,0 +1,14 @@ +$error, 'url'=>G5_URL))); + +$token = get_admin_token(); + +die(json_encode(array('error'=>'', 'token'=>$token, 'url'=>''))); +?> \ No newline at end of file diff --git a/adm/auth_list.php b/adm/auth_list.php index 3dfad19f5..4058b8e53 100644 --- a/adm/auth_list.php +++ b/adm/auth_list.php @@ -5,8 +5,6 @@ include_once('./_common.php'); if ($is_admin != 'super') alert('최고관리자만 접근 가능합니다.'); -$token = get_token(); - $sql_common = " from {$g5['auth_table']} a left join {$g5['member_table']} b on (a.mb_id=b.mb_id) "; $sql_search = " where (1) "; @@ -73,7 +71,7 @@ $colspan = 5; - +