diff --git a/adm/admin.tail.php b/adm/admin.tail.php
index 6f5514788..16412fc61 100644
--- a/adm/admin.tail.php
+++ b/adm/admin.tail.php
@@ -21,7 +21,7 @@ if (!defined('_GNUBOARD_')) exit;
-
+
+
diff --git a/bbs/write_token.php b/bbs/write_token.php
new file mode 100644
index 000000000..e8578ef7e
--- /dev/null
+++ b/bbs/write_token.php
@@ -0,0 +1,13 @@
+'게시판 정보가 올바르지 않습니다.', 'url'=>G5_URL)));
+
+set_session('ss_write_'.$bo_table.'_token', '');
+
+$token = get_write_token($bo_table);
+
+die(json_encode(array('error'=>'', 'token'=>$token, 'url'=>'')));
+?>
\ No newline at end of file
diff --git a/bbs/write_update.php b/bbs/write_update.php
index b6db2e699..0d52074ba 100644
--- a/bbs/write_update.php
+++ b/bbs/write_update.php
@@ -3,6 +3,9 @@ include_once('./_common.php');
include_once(G5_LIB_PATH.'/naver_syndi.lib.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
+// 토큰체크
+check_write_token($bo_table);
+
$g5['title'] = '게시글 저장';
$msg = array();
diff --git a/js/common.js b/js/common.js
index 4877b7c5b..8def959e5 100644
--- a/js/common.js
+++ b/js/common.js
@@ -689,4 +689,53 @@ $(function(){
return false;
}
});
+});
+
+function get_write_token(bo_table)
+{
+ var token = "";
+
+ $.ajax({
+ type: "POST",
+ url: g5_bbs_url+"/write_token.php",
+ data: { bo_table: bo_table },
+ 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[name=fwrite] input:submit", function() {
+ var f = this.form;
+ var bo_table = f.bo_table.value;
+ var token = get_write_token(bo_table);
+
+ 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/lib/common.lib.php b/lib/common.lib.php
index 586aed030..ccbcc1b5a 100644
--- a/lib/common.lib.php
+++ b/lib/common.lib.php
@@ -3233,4 +3233,29 @@ class str_encrypt
return $result;
}
}
+
+// 불법접근을 막도록 토큰을 생성하면서 토큰값을 리턴
+function get_write_token($bo_table)
+{
+ $token = md5(uniqid(rand(), true));
+ set_session('ss_write_'.$bo_table.'_token', $token);
+
+ return $token;
+}
+
+
+// POST로 넘어온 토큰과 세션에 저장된 토큰 비교
+function check_write_token($bo_table)
+{
+ if(!$bo_table)
+ alert('올바른 방법으로 이용해 주십시오.', G5_URL);
+
+ $token = get_session('ss_write_'.$bo_table.'_token');
+ set_session('ss_write_'.$bo_table.'_token', '');
+
+ if(!$token || !$_REQUEST['token'] || $token != $_REQUEST['token'])
+ alert('올바른 방법으로 이용해 주십시오.', G5_URL);
+
+ return true;
+}
?>
\ No newline at end of file