diff --git a/adm/admin.js b/adm/admin.js index a3f4c7d64..4d971c321 100644 --- a/adm/admin.js +++ b/adm/admin.js @@ -57,12 +57,20 @@ function is_checked(elements_name) return checked; } -function delete_confirm() +function delete_confirm(el) { - if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) + if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) { + var token = get_ajax_token(); + var href = el.href.replace(/&token=.+$/g, ""); + if(!token) { + alert("토큰 정보가 올바르지 않습니다."); + return false; + } + el.href = href+"&token="+token; return true; - else + } else { return false; + } } function delete_confirm2(msg) @@ -71,4 +79,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: g5_admin_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.prepend(''); + + $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 aa08a1569..16f8c2f69 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 || !$_REQUEST['token'] || $token != $_REQUEST['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; - +