diff --git a/adm/config_form.php b/adm/config_form.php index 1c18bb65b..d92f348c3 100644 --- a/adm/config_form.php +++ b/adm/config_form.php @@ -25,14 +25,17 @@ if (!isset($config['cf_mobile_new_skin'])) { ADD `cf_mobile_member_skin` VARCHAR(255) NOT NULL AFTER `cf_mobile_connect_skin` ", true); } -if(!isset($config['cf_gcaptcha_mp3'])) { +if (isset($config['cf_gcaptcha_mp3'])) { sql_query(" ALTER TABLE `{$g5['config_table']}` - ADD `cf_gcaptcha_mp3` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_mobile_member_skin` ", true); + CHANGE `cf_gcaptcha_mp3` `cf_captcha_mp3` VARCHAR(255) NOT NULL DEFAULT '' ", true); +} else if (!isset($config['cf_captcha_mp3'])) { + sql_query(" ALTER TABLE `{$g5['config_table']}` + ADD `cf_captcha_mp3` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_mobile_member_skin` ", true); } if(!isset($config['cf_editor'])) { sql_query(" ALTER TABLE `{$g5['config_table']}` - ADD `cf_editor` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_gcaptcha_mp3` ", true); + ADD `cf_editor` VARCHAR(255) NOT NULL DEFAULT '' AFTER `cf_captcha_mp3` ", true); } if(!isset($config['cf_googl_shorturl_apikey'])) { diff --git a/adm/config_form_update.php b/adm/config_form_update.php index eb80e915e..b7a1bbef7 100644 --- a/adm/config_form_update.php +++ b/adm/config_form_update.php @@ -107,7 +107,7 @@ $sql = " update {$g5['config_table']} cf_mobile_search_skin = '{$_POST['cf_mobile_search_skin']}', cf_mobile_connect_skin = '{$_POST['cf_mobile_connect_skin']}', cf_mobile_member_skin = '{$_POST['cf_mobile_member_skin']}', - cf_gcaptcha_mp3 = '{$_POST['cf_gcaptcha_mp3']}', + cf_captcha_mp3 = '{$_POST['cf_captcha_mp3']}', cf_editor = '{$_POST['cf_editor']}', cf_cert_use = '{$_POST['cf_cert_use']}', cf_cert_ipin = '{$_POST['cf_cert_ipin']}', diff --git a/bbs/formmail.php b/bbs/formmail.php index ea18b8211..4b2d24aff 100644 --- a/bbs/formmail.php +++ b/bbs/formmail.php @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/bbs/register_form_update.php b/bbs/register_form_update.php index 2c773aac0..eb2c80cc4 100644 --- a/bbs/register_form_update.php +++ b/bbs/register_form_update.php @@ -1,6 +1,6 @@ 50) { diff --git a/bbs/write_update.php b/bbs/write_update.php index 1ca656651..0cc5d3e14 100644 --- a/bbs/write_update.php +++ b/bbs/write_update.php @@ -1,6 +1,6 @@ = '5.1.0') { - //if (function_exists("date_default_timezone_set")) date_default_timezone_set("Asia/Seoul"); - date_default_timezone_set("Asia/Seoul"); -} - -/******************** - 경로 상수 -********************/ - -/* -보안서버 도메인 -회원가입, 글쓰기에 사용되는 https 로 시작되는 주소를 말합니다. -포트가 있다면 도메인 뒤에 :443 과 같이 입력하세요. -보안서버주소가 없다면 공란으로 두시면 되며 보안서버주소 뒤에 / 는 붙이지 않습니다. -입력예) https://www.domain.com:443/gnuboard5 -*/ -define('G5_DOMAIN', ''); -define('G5_HTTPS_DOMAIN', ''); - -/* -www.sir.co.kr 과 sir.co.kr 도메인은 서로 다른 도메인으로 인식합니다. 쿠키를 공유하려면 .sir.co.kr 과 같이 입력하세요. -이곳에 입력이 없다면 www 붙은 도메인과 그렇지 않은 도메인은 쿠키를 공유하지 않으므로 로그인이 풀릴 수 있습니다. -*/ -define('G5_COOKIE_DOMAIN', ''); - -define('G5_DBCONFIG_FILE', 'dbconfig.php'); - -define('G5_ADMIN_DIR', 'adm'); -define('G5_BBS_DIR', 'bbs'); -define('G5_CSS_DIR', 'css'); -define('G5_DATA_DIR', 'data'); -define('G5_EXTEND_DIR', 'extend'); -define('G5_IMG_DIR', 'img'); -define('G5_JS_DIR', 'js'); -define('G5_LIB_DIR', 'lib'); -define('G5_PLUGIN_DIR', 'plugin'); -define('G5_SKIN_DIR', 'skin'); -define('G5_GCAPTCHA_DIR', 'gcaptcha'); -define('G5_EDITOR_DIR', 'editor'); -define('G5_MOBILE_DIR', 'mobile'); -define('G5_OKNAME_DIR', 'okname'); += '5.1.0') { + //if (function_exists("date_default_timezone_set")) date_default_timezone_set("Asia/Seoul"); + date_default_timezone_set("Asia/Seoul"); +} + +/******************** + 경로 상수 +********************/ + +/* +보안서버 도메인 +회원가입, 글쓰기에 사용되는 https 로 시작되는 주소를 말합니다. +포트가 있다면 도메인 뒤에 :443 과 같이 입력하세요. +보안서버주소가 없다면 공란으로 두시면 되며 보안서버주소 뒤에 / 는 붙이지 않습니다. +입력예) https://www.domain.com:443/gnuboard5 +*/ +define('G5_DOMAIN', ''); +define('G5_HTTPS_DOMAIN', ''); + +/* +www.sir.co.kr 과 sir.co.kr 도메인은 서로 다른 도메인으로 인식합니다. 쿠키를 공유하려면 .sir.co.kr 과 같이 입력하세요. +이곳에 입력이 없다면 www 붙은 도메인과 그렇지 않은 도메인은 쿠키를 공유하지 않으므로 로그인이 풀릴 수 있습니다. +*/ +define('G5_COOKIE_DOMAIN', ''); + +define('G5_DBCONFIG_FILE', 'dbconfig.php'); + +define('G5_ADMIN_DIR', 'adm'); +define('G5_BBS_DIR', 'bbs'); +define('G5_CSS_DIR', 'css'); +define('G5_DATA_DIR', 'data'); +define('G5_EXTEND_DIR', 'extend'); +define('G5_IMG_DIR', 'img'); +define('G5_JS_DIR', 'js'); +define('G5_LIB_DIR', 'lib'); +define('G5_PLUGIN_DIR', 'plugin'); +define('G5_SKIN_DIR', 'skin'); +define('G5_CAPTCHA_DIR', 'kcaptcha'); +define('G5_EDITOR_DIR', 'editor'); +define('G5_MOBILE_DIR', 'mobile'); +define('G5_OKNAME_DIR', 'okname'); + +define('G5_KCPCERT_DIR', 'kcpcert'); + +define('G5_SNS_DIR', 'sns'); +define('G5_SYNDI_DIR', 'syndi'); +define('G5_PHPMAILER_DIR', 'PHPMailer_v2.0.4'); + +// URL 은 브라우저상에서의 경로 (도메인으로 부터의) +if (G5_DOMAIN) { + define('G5_URL', G5_DOMAIN); +} else { + if (isset($g5_path['url'])) + define('G5_URL', $g5_path['url']); + else + define('G5_URL', ''); +} + +if (isset($g5_path['path'])) { + define('G5_PATH', $g5_path['path']); +} else { + define('G5_PATH', ''); +} + +define('G5_ADMIN_URL', G5_URL.'/'.G5_ADMIN_DIR); +define('G5_BBS_URL', G5_URL.'/'.G5_BBS_DIR); +define('G5_CSS_URL', G5_URL.'/'.G5_CSS_DIR); +define('G5_DATA_URL', G5_URL.'/'.G5_DATA_DIR); +define('G5_IMG_URL', G5_URL.'/'.G5_IMG_DIR); +define('G5_JS_URL', G5_URL.'/'.G5_JS_DIR); +define('G5_SKIN_URL', G5_URL.'/'.G5_SKIN_DIR); +define('G5_PLUGIN_URL', G5_URL.'/'.G5_PLUGIN_DIR); +define('G5_CAPTCHA_URL', G5_PLUGIN_URL.'/'.G5_CAPTCHA_DIR); +define('G5_EDITOR_URL', G5_PLUGIN_URL.'/'.G5_EDITOR_DIR); +define('G5_OKNAME_URL', G5_PLUGIN_URL.'/'.G5_OKNAME_DIR); +define('G5_KCPCERT_URL', G5_PLUGIN_URL.'/'.G5_KCPCERT_DIR); +define('G5_SNS_URL', G5_PLUGIN_URL.'/'.G5_SNS_DIR); +define('G5_SYNDI_URL', G5_PLUGIN_URL.'/'.G5_SYNDI_DIR); +define('G5_MOBILE_URL', G5_URL.'/'.G5_MOBILE_DIR); + +// PATH 는 서버상에서의 절대경로 +define('G5_ADMIN_PATH', G5_PATH.'/'.G5_ADMIN_DIR); +define('G5_BBS_PATH', G5_PATH.'/'.G5_BBS_DIR); +define('G5_DATA_PATH', G5_PATH.'/'.G5_DATA_DIR); +define('G5_EXTEND_PATH', G5_PATH.'/'.G5_EXTEND_DIR); +define('G5_LIB_PATH', G5_PATH.'/'.G5_LIB_DIR); +define('G5_PLUGIN_PATH', G5_PATH.'/'.G5_PLUGIN_DIR); +define('G5_SKIN_PATH', G5_PATH.'/'.G5_SKIN_DIR); +define('G5_MOBILE_PATH', G5_PATH.'/'.G5_MOBILE_DIR); +define('G5_CAPTCHA_PATH', G5_PLUGIN_PATH.'/'.G5_CAPTCHA_DIR); +define('G5_EDITOR_PATH', G5_PLUGIN_PATH.'/'.G5_EDITOR_DIR); +define('G5_OKNAME_PATH', G5_PLUGIN_PATH.'/'.G5_OKNAME_DIR); + +define('G5_KCPCERT_PATH', G5_PLUGIN_PATH.'/'.G5_KCPCERT_DIR); + +define('G5_SNS_PATH', G5_PLUGIN_PATH.'/'.G5_SNS_DIR); +define('G5_SYNDI_PATH', G5_PLUGIN_PATH.'/'.G5_SYNDI_DIR); +define('G5_PHPMAILER_PATH', G5_PLUGIN_PATH.'/'.G5_PHPMAILER_DIR); +//============================================================================== + + +define('G5_USE_CACHE', true); // 최신글등에 cache 기능 사용 여부 + + +/******************** + 시간 상수 +********************/ +// 서버의 시간과 실제 사용하는 시간이 틀린 경우 수정하세요. +// 하루는 86400 초입니다. 1시간은 3600초 +// 6시간이 빠른 경우 time() + (3600 * 6); +// 6시간이 느린 경우 time() - (3600 * 6); +define('G5_SERVER_TIME', time()); +define('G5_TIME_YMDHIS', date('Y-m-d H:i:s', G5_SERVER_TIME)); +define('G5_TIME_YMD', substr(G5_TIME_YMDHIS, 0, 10)); +define('G5_TIME_HIS', substr(G5_TIME_YMDHIS, 11, 8)); + +// 입력값 검사 상수 (숫자를 변경하시면 안됩니다.) +define('G5_ALPHAUPPER', 1); // 영대문자 +define('G5_ALPHALOWER', 2); // 영소문자 +define('G5_ALPHABETIC', 4); // 영대,소문자 +define('G5_NUMERIC', 8); // 숫자 +define('G5_HANGUL', 16); // 한글 +define('G5_SPACE', 32); // 공백 +define('G5_SPECIAL', 64); // 특수문자 + +// 퍼미션 +define('G5_DIR_PERMISSION', 0755); // 디렉토리 생성시 퍼미션 +define('G5_FILE_PERMISSION', 0644); // 파일 생성시 퍼미션 + +// 모바일 인지 결정 $_SERVER['HTTP_USER_AGENT'] +define('G5_MOBILE_AGENT', 'phone|samsung|lgtel|mobile|skt|nokia|blackberry|android|sony'); + +// SMTP +// lib/mailer.lib.php 에서 사용 +define('G5_SMTP', '127.0.0.1'); + + +/******************** + 기타 상수 +********************/ + +// 게시판에서 링크의 기본갯수를 말합니다. +// 필드를 추가하면 이 숫자를 필드수에 맞게 늘려주십시오. +define('G5_LINK_COUNT', 2); ?> \ No newline at end of file diff --git a/css/default.css b/css/default.css index a15b14796..a8841ce40 100644 --- a/css/default.css +++ b/css/default.css @@ -112,8 +112,14 @@ a:hover, a:focus, a:active {color:#000;text-decoration:underline} .img_fix {width:100%;height:auto} /* 캡챠 자동등록(입력)방지 기본 */ -#captcha img {border:1px solid #cfded8;border-right:0} -#captcha_mp3 img {border:1px solid #cfded8;border-left:0;background:#494949} +#captcha {display:inline-block;position:relative} +#captcha legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} +#captcha_img {width:100px;height:41px;border:1px solid #e9e9e9} +#captcha #captcha_key {margin:0 0 0 25px;padding:0 5px;width:70px;height:41px;border:1px solid #b8c9c2;background:#f7f7f7;font-size:1.333em;font-weight:bold;text-align:center;line-height:2.8em} +#captcha #captcha_mp3 {position:absolute;top:0;left:101px;;margin:0;padding:0;width:23px;height:22px;border:0;background:transparent;vertical-align:middle;overflow:hidden;cursor:pointer} +#captcha #captcha_mp3 span {position:absolute;top:0;left:0;width:23px;height:22px;background:url('../plugin/kcaptcha/img/sound.gif')} +#captcha #captcha_reload {position:absolute;top:21px;left:101px;margin:0;padding:0;width:23px;height:22px;border:0;background:transparent;vertical-align:middle;overflow:hidden;cursor:pointer} +#captcha #captcha_reload span {position:absolute;top:0;left:0;width:23px;height:22px;background:url('../plugin/kcaptcha/img/reload.gif')} #mp3_embed {position:absolute;top:0;left:0;width:1px;height:1px;overflow:hidden} /* 익스 8 이하에서 음성캡챠 실행 스타일 */ /* ckeditor 단축키 */ diff --git a/mobile/skin/member/basic/style.css b/mobile/skin/member/basic/style.css index 0db0de419..3b4664444 100644 --- a/mobile/skin/member/basic/style.css +++ b/mobile/skin/member/basic/style.css @@ -86,7 +86,6 @@ /* 회원가입 입력 */ #fregisterform #reg_mb_email, #fregisterform .frm_address {width:100%} #fregisterform textarea {width:100%;height:50px} - /* 회원가입 완료 */ #reg_result {padding:4em 1em 0} #reg_result_logo {margin-bottom:50px;text-align:center} diff --git a/plugin/gcaptcha/captcha.lib.php b/plugin/gcaptcha/captcha.lib.php new file mode 100644 index 000000000..7b9488ada --- /dev/null +++ b/plugin/gcaptcha/captcha.lib.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugin/gcaptcha/gcaptcha.js b/plugin/gcaptcha/gcaptcha.js index 2fef41a5d..593eed18c 100644 --- a/plugin/gcaptcha/gcaptcha.js +++ b/plugin/gcaptcha/gcaptcha.js @@ -6,7 +6,7 @@ function chk_captcha() var captcha_result = false; $.ajax({ type: "POST", - url: g5_gcaptcha_url+"/get.php", + url: g5_captcha_url+"/get.php", data: { "captcha_key": captcha_key.value }, @@ -19,6 +19,7 @@ function chk_captcha() if (!captcha_result) { alert("자동등록방지 숫자가 틀렸습니다."); captcha_key.select(); + captcha_key.focus(); return false; } return true; @@ -26,7 +27,7 @@ function chk_captcha() $(function() { $("#captcha").click(function(e) { - this.setAttribute("src", g5_url+"/plugin/gcaptcha/run.php?t="+(new Date).getTime()); + this.setAttribute("src", g5_captcha_url+"/run.php?t="+(new Date).getTime()); var keycode = (e.keyCode ? e.keyCode : e.which); // 첫 실행에서는 포커스를 주지 않음 if (typeof(keycode) != "undefined") { diff --git a/plugin/gcaptcha/gcaptcha.lib.php b/plugin/gcaptcha/gcaptcha.lib.php index efd1d6681..ba54d78a5 100644 --- a/plugin/gcaptcha/gcaptcha.lib.php +++ b/plugin/gcaptcha/gcaptcha.lib.php @@ -100,7 +100,7 @@ class gcaptcha // Replace path by your own font path $fonts = Array(); - foreach (glob(G5_GCAPTCHA_PATH.'/fonts/*.ttf') as $filename) { + foreach (glob(G5_CAPTCHA_PATH.'/fonts/*.ttf') as $filename) { $fonts[] = $filename; } $font = $fonts[mt_rand(0, count($fonts)-1)]; @@ -140,7 +140,7 @@ class gcaptcha $number = (string)$_SESSION['ss_captcha_key']; $mp3s = array(); for($i=0;$icaptcha_filename.'.jpg'; $mp3_file_url = G5_DATA_URL.'/cache/'.$obj->captcha_filename.'.mp3'; - $html .= "\n".''; - $html .= "\n".''; + $html .= "\n".''; + $html .= "\n".''; $html .= '
'; $html .= '자동등록방지'; if (G5_IS_MOBILE) $html .= ''; $html .= ''; - if (!G5_IS_MOBILE) $html .= '숫자를 음성으로 듣기'; + if (!G5_IS_MOBILE) $html .= '숫자를 음성으로 듣기'; $html .= ''; $html .= '

자동등록방지 숫자를 순서대로 입력하세요.

'; $html .= '
'; diff --git a/plugin/gcaptcha/get.php b/plugin/gcaptcha/get.php index a0e9b7e7d..0673e2bfc 100644 --- a/plugin/gcaptcha/get.php +++ b/plugin/gcaptcha/get.php @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/plugin/kcaptcha/_common.php b/plugin/kcaptcha/_common.php new file mode 100644 index 000000000..14553420b --- /dev/null +++ b/plugin/kcaptcha/_common.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugin/kcaptcha/captcha.lib.php b/plugin/kcaptcha/captcha.lib.php new file mode 100644 index 000000000..a3c8d363d --- /dev/null +++ b/plugin/kcaptcha/captcha.lib.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugin/kcaptcha/fonts/antiqua.png b/plugin/kcaptcha/fonts/antiqua.png new file mode 100644 index 000000000..78d93d597 Binary files /dev/null and b/plugin/kcaptcha/fonts/antiqua.png differ diff --git a/plugin/kcaptcha/fonts/baskerville.png b/plugin/kcaptcha/fonts/baskerville.png new file mode 100644 index 000000000..5a635287d Binary files /dev/null and b/plugin/kcaptcha/fonts/baskerville.png differ diff --git a/plugin/kcaptcha/fonts/batang.png b/plugin/kcaptcha/fonts/batang.png new file mode 100644 index 000000000..ba0075634 Binary files /dev/null and b/plugin/kcaptcha/fonts/batang.png differ diff --git a/plugin/kcaptcha/fonts/bookman.png b/plugin/kcaptcha/fonts/bookman.png new file mode 100644 index 000000000..1132a122a Binary files /dev/null and b/plugin/kcaptcha/fonts/bookman.png differ diff --git a/plugin/kcaptcha/fonts/calisto.png b/plugin/kcaptcha/fonts/calisto.png new file mode 100644 index 000000000..b3b0dd560 Binary files /dev/null and b/plugin/kcaptcha/fonts/calisto.png differ diff --git a/plugin/kcaptcha/fonts/cambria.png b/plugin/kcaptcha/fonts/cambria.png new file mode 100644 index 000000000..76ad92107 Binary files /dev/null and b/plugin/kcaptcha/fonts/cambria.png differ diff --git a/plugin/kcaptcha/fonts/centaur.png b/plugin/kcaptcha/fonts/centaur.png new file mode 100644 index 000000000..30a46cadd Binary files /dev/null and b/plugin/kcaptcha/fonts/centaur.png differ diff --git a/plugin/kcaptcha/fonts/century.png b/plugin/kcaptcha/fonts/century.png new file mode 100644 index 000000000..abf89d7e2 Binary files /dev/null and b/plugin/kcaptcha/fonts/century.png differ diff --git a/plugin/kcaptcha/fonts/chaparral.png b/plugin/kcaptcha/fonts/chaparral.png new file mode 100644 index 000000000..7395bacdb Binary files /dev/null and b/plugin/kcaptcha/fonts/chaparral.png differ diff --git a/plugin/kcaptcha/fonts/constantia.png b/plugin/kcaptcha/fonts/constantia.png new file mode 100644 index 000000000..d3abc6464 Binary files /dev/null and b/plugin/kcaptcha/fonts/constantia.png differ diff --git a/plugin/kcaptcha/fonts/footlight.png b/plugin/kcaptcha/fonts/footlight.png new file mode 100644 index 000000000..cb2a634ec Binary files /dev/null and b/plugin/kcaptcha/fonts/footlight.png differ diff --git a/plugin/kcaptcha/fonts/garamond.png b/plugin/kcaptcha/fonts/garamond.png new file mode 100644 index 000000000..eb7222123 Binary files /dev/null and b/plugin/kcaptcha/fonts/garamond.png differ diff --git a/plugin/kcaptcha/fonts/georgia.png b/plugin/kcaptcha/fonts/georgia.png new file mode 100644 index 000000000..d00bb75e4 Binary files /dev/null and b/plugin/kcaptcha/fonts/georgia.png differ diff --git a/plugin/kcaptcha/fonts/goudy_old.png b/plugin/kcaptcha/fonts/goudy_old.png new file mode 100644 index 000000000..b4d236d9a Binary files /dev/null and b/plugin/kcaptcha/fonts/goudy_old.png differ diff --git a/plugin/kcaptcha/fonts/kozuka.png b/plugin/kcaptcha/fonts/kozuka.png new file mode 100644 index 000000000..ececa1104 Binary files /dev/null and b/plugin/kcaptcha/fonts/kozuka.png differ diff --git a/plugin/kcaptcha/fonts/lucida.png b/plugin/kcaptcha/fonts/lucida.png new file mode 100644 index 000000000..050732aa7 Binary files /dev/null and b/plugin/kcaptcha/fonts/lucida.png differ diff --git a/plugin/kcaptcha/fonts/minion.png b/plugin/kcaptcha/fonts/minion.png new file mode 100644 index 000000000..34384e51a Binary files /dev/null and b/plugin/kcaptcha/fonts/minion.png differ diff --git a/plugin/kcaptcha/fonts/palatino.png b/plugin/kcaptcha/fonts/palatino.png new file mode 100644 index 000000000..3a9d37b24 Binary files /dev/null and b/plugin/kcaptcha/fonts/palatino.png differ diff --git a/plugin/kcaptcha/fonts/perpetua.png b/plugin/kcaptcha/fonts/perpetua.png new file mode 100644 index 000000000..8b4c0871a Binary files /dev/null and b/plugin/kcaptcha/fonts/perpetua.png differ diff --git a/plugin/kcaptcha/fonts/rockwell.png b/plugin/kcaptcha/fonts/rockwell.png new file mode 100644 index 000000000..da19566d1 Binary files /dev/null and b/plugin/kcaptcha/fonts/rockwell.png differ diff --git a/plugin/kcaptcha/fonts/times.png b/plugin/kcaptcha/fonts/times.png new file mode 100644 index 000000000..656e99d97 Binary files /dev/null and b/plugin/kcaptcha/fonts/times.png differ diff --git a/plugin/kcaptcha/fonts/warnock.png b/plugin/kcaptcha/fonts/warnock.png new file mode 100644 index 000000000..c114dbcb9 Binary files /dev/null and b/plugin/kcaptcha/fonts/warnock.png differ diff --git a/plugin/kcaptcha/img/dot.gif b/plugin/kcaptcha/img/dot.gif new file mode 100644 index 000000000..35d42e808 Binary files /dev/null and b/plugin/kcaptcha/img/dot.gif differ diff --git a/plugin/kcaptcha/img/reload.gif b/plugin/kcaptcha/img/reload.gif new file mode 100644 index 000000000..439b6db92 Binary files /dev/null and b/plugin/kcaptcha/img/reload.gif differ diff --git a/plugin/kcaptcha/img/sound.gif b/plugin/kcaptcha/img/sound.gif new file mode 100644 index 000000000..5adcb1e8b Binary files /dev/null and b/plugin/kcaptcha/img/sound.gif differ diff --git a/plugin/kcaptcha/kcaptcha.js b/plugin/kcaptcha/kcaptcha.js new file mode 100644 index 000000000..cfa4db144 --- /dev/null +++ b/plugin/kcaptcha/kcaptcha.js @@ -0,0 +1,91 @@ +$(function(){ + $("#captcha_reload").bind("click", function(){ + $.ajax({ + type: 'POST', + url: g5_captcha_url+'/kcaptcha_session.php', + cache: false, + async: false, + success: function(text) { + $('#captcha_img').attr('src', g5_captcha_url+'/kcaptcha_image.php?t=' + (new Date).getTime()); + } + }); + }).trigger("click"); + + var mp3_url = ""; + $("#captcha_mp3").click(function(){ + $("body").css("cursor", "wait"); + + $.ajax({ + type: 'POST', + url: g5_captcha_url+'/kcaptcha_mp3.php', + cache: false, + async: false, + success: function(url) { + if (url) { + mp3_url = url + "?t="+new Date().getTime(); + } + } + }); + + var html5use = false; + var html5audio = document.createElement("audio"); + if (html5audio.canPlayType && html5audio.canPlayType("audio/mpeg")) { + var wav = new Audio(mp3_url); + wav.id = "mp3_audio"; + wav.autoplay = true; + wav.controls = false; + wav.autobuffer = false; + wav.loop = false; + + if ($("#mp3_audio").length) $("#mp3_audio").remove(); + $("#captcha_mp3").after(wav); + + html5use = true; + } + + if (!html5use) { + var object = ''; + object += ''; + object += ''; + object += ''; + object += ''; + object += ''; + object += ''; + if ($("#mp3_object").length) + $("#mp3_object").remove(); + $("#captcha_mp3").after(object); + } + + $("body").css("cursor", "default"); + return false; + + }).css('cursor', 'pointer'); +}); + +// 출력된 캡챠이미지의 키값과 입력한 키값이 같은지 비교한다. +function chk_captcha() +{ + var captcha_result = false; + var captcha_key = document.getElementById('captcha_key'); + $.ajax({ + type: 'POST', + url: g5_captcha_url+'/kcaptcha_result.php', + data: { + 'captcha_key': captcha_key.value + }, + cache: false, + async: false, + success: function(text) { + captcha_result = text; + } + }); + + if (!captcha_result) { + alert('글자가 틀렸거나 입력 횟수가 넘었습니다.\n\n새로고침을 클릭하여 다시 입력해 주십시오.'); + captcha_key.select(); + captcha_key.focus(); + return false; + } + + return true; +} \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha.lib.php b/plugin/kcaptcha/kcaptcha.lib.php new file mode 100644 index 000000000..320bd40fe --- /dev/null +++ b/plugin/kcaptcha/kcaptcha.lib.php @@ -0,0 +1,278 @@ +keystring=''; + for($i=0;$i<$length;$i++){ + $this->keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)}; + } + if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $this->keystring)) break; + } + */ + + $font_file=$fonts[mt_rand(0, count($fonts)-1)]; + $font=imagecreatefrompng($font_file); + imagealphablending($font, true); + $fontfile_width=imagesx($font); + $fontfile_height=imagesy($font)-1; + $font_metrics=array(); + $symbol=0; + $reading_symbol=false; + + // loading font + for($i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){ + $transparent = (imagecolorat($font, $i, 0) >> 24) == 127; + + if(!$reading_symbol && !$transparent){ + $font_metrics[$alphabet{$symbol}]=array('start'=>$i); + $reading_symbol=true; + continue; + } + + if($reading_symbol && $transparent){ + $font_metrics[$alphabet{$symbol}]['end']=$i; + $reading_symbol=false; + $symbol++; + continue; + } + } + + $img=imagecreatetruecolor($width, $height); + imagealphablending($img, true); + $white=imagecolorallocate($img, 255, 255, 255); + $black=imagecolorallocate($img, 0, 0, 0); + + imagefilledrectangle($img, 0, 0, $width-1, $height-1, $white); + + // draw text + $x=1; + for($i=0;$ikeystring);$i++){ + $m=$font_metrics[$this->keystring{$i}]; + + $y=mt_rand(-$fluctuation_amplitude, $fluctuation_amplitude)+($height-$fontfile_height)/2+2; + + if($no_spaces){ + $shift=0; + if($i>0){ + $shift=10000; + for($sy=7;$sy<$fontfile_height-20;$sy+=1){ + for($sx=$m['start']-1;$sx<$m['end'];$sx+=1){ + $rgb=imagecolorat($font, $sx, $sy); + $opacity=$rgb>>24; + if($opacity<127){ + $left=$sx-$m['start']+$x; + $py=$sy+$y; + if($py>$height) break; + for($px=min($left,$width-1);$px>$left-12 && $px>=0;$px-=1){ + $color=imagecolorat($img, $px, $py) & 0xff; + if($color+$opacity<190){ + if($shift>$left-$px){ + $shift=$left-$px; + } + break; + } + } + break; + } + } + } + if($shift==10000){ + $shift=mt_rand(4,6); + } + + } + }else{ + $shift=1; + } + imagecopy($img, $font, $x-$shift, $y, $m['start'], 1, $m['end']-$m['start'], $fontfile_height); + $x+=$m['end']-$m['start']-$shift; + } + }while($x>=$width-10); // while not fit in canvas + + $center=$x/2; + + // credits. To remove, see configuration file + $img2=imagecreatetruecolor($width, $height+($show_credits?12:0)); + $foreground=imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]); + $background=imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]); + imagefilledrectangle($img2, 0, 0, $width-1, $height-1, $background); + imagefilledrectangle($img2, 0, $height, $width-1, $height+12, $foreground); + $credits=empty($credits)?$_SERVER['HTTP_HOST']:$credits; + imagestring($img2, 2, $width/2-imagefontwidth(2)*strlen($credits)/2, $height-2, $credits, $background); + + // periods + $rand1=mt_rand(750000,1200000)/10000000; + $rand2=mt_rand(750000,1200000)/10000000; + $rand3=mt_rand(750000,1200000)/10000000; + $rand4=mt_rand(750000,1200000)/10000000; + // phases + $rand5=mt_rand(0,31415926)/10000000; + $rand6=mt_rand(0,31415926)/10000000; + $rand7=mt_rand(0,31415926)/10000000; + $rand8=mt_rand(0,31415926)/10000000; + // amplitudes + $rand9=mt_rand(330,420)/110; + $rand10=mt_rand(330,450)/110; + + //wave distortion + + for($x=0;$x<$width;$x++){ + for($y=0;$y<$height;$y++){ + if ($wave) { + $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1; + $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10; + } + else { + $sx=$x-$width/2+$center+1; + $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*1.5; + } + + if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){ + continue; + }else{ + $color=imagecolorat($img, $sx, $sy) & 0xFF; + $color_x=imagecolorat($img, $sx+1, $sy) & 0xFF; + $color_y=imagecolorat($img, $sx, $sy+1) & 0xFF; + $color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF; + } + + if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){ + continue; + }else if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){ + $newred=$foreground_color[0]; + $newgreen=$foreground_color[1]; + $newblue=$foreground_color[2]; + }else{ + $frsx=$sx-floor($sx); + $frsy=$sy-floor($sy); + $frsx1=1-$frsx; + $frsy1=1-$frsy; + + $newcolor=( + $color*$frsx1*$frsy1+ + $color_x*$frsx*$frsy1+ + $color_y*$frsx1*$frsy+ + $color_xy*$frsx*$frsy); + + if($newcolor>255) $newcolor=255; + $newcolor=$newcolor/255; + $newcolor0=1-$newcolor; + + $newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0]; + $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1]; + $newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2]; + } + + imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue)); + } + } + + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); + header('Cache-Control: no-store, no-cache, must-revalidate'); + header('Cache-Control: post-check=0, pre-check=0', FALSE); + header('Pragma: no-cache'); + + if(function_exists("imagejpeg")){ + header("Content-Type: image/jpeg"); + imagejpeg($img2, null, $jpeg_quality); + }else if(function_exists("imagegif")){ + header("Content-Type: image/gif"); + imagegif($img2); + }else if(function_exists("imagepng")){ + header("Content-Type: image/x-png"); + imagepng($img2); + } + } + + // returns keystring + function getKeyString(){ + return $this->keystring; + } + + function setKeyString($str){ + $this->keystring = $str; + } +} + + +// 캡챠 HTML 코드 출력 +function captcha_html($class="captcha") +{ + $html .= "\n".''; + $html .= "\n".''; + $html .= "\n".''; + $html .= "\n".'
'; + $html .= "\n".'자동등록방지'; + $html .= "\n".''; + $html .= "\n".''; + $html .= "\n".''; + $html .= ''; + $html .= "\n".'
'; + $html .= "\n".'자동등록방지 숫자를 순서대로 입력하세요.'; + return $html; +} + + +// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 +function chk_captcha_js() +{ + return "if (!chk_captcha()) return false;\n"; +} + + +// 세션에 저장된 캡챠값과 $_POST 로 넘어온 캡챠값을 비교 +function chk_captcha() +{ + $captcha_count = (int)get_session('ss_captcha_count'); + if ($captcha_count > 5) { + return false; + } + + if (!isset($_POST['captcha_key'])) return false; + if (!trim($_POST['captcha_key'])) return false; + if ($_POST['captcha_key'] != get_session('ss_captcha_key')) { + $_SESSION['ss_captcha_count'] = $captcha_count + 1; + $sql = " insert _error set er_datetime = NOW(), er_ip = '{$_SERVER['REMOTE_ADDR']}', er_user_agent = '{$_SERVER['HTTP_USER_AGENT']}', er_request = 'POST(".$_POST['captcha_key'].')!=SESSION('.get_session('ss_captcha_key').")' "; + sql_query($sql); + return false; + } + return true; +} +?> \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha_config.php b/plugin/kcaptcha/kcaptcha_config.php new file mode 100644 index 000000000..7d8f70f02 --- /dev/null +++ b/plugin/kcaptcha/kcaptcha_config.php @@ -0,0 +1,42 @@ + \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha_image.php b/plugin/kcaptcha/kcaptcha_image.php new file mode 100644 index 000000000..e45df0306 --- /dev/null +++ b/plugin/kcaptcha/kcaptcha_image.php @@ -0,0 +1,11 @@ +setKeyString(get_session("ss_captcha_key")); +$captcha->getKeyString(); +$captcha->image(); +?> \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha_mp3.php b/plugin/kcaptcha/kcaptcha_mp3.php new file mode 100644 index 000000000..d7c0cd35a --- /dev/null +++ b/plugin/kcaptcha/kcaptcha_mp3.php @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha_result.php b/plugin/kcaptcha/kcaptcha_result.php new file mode 100644 index 000000000..ad4daf8ca --- /dev/null +++ b/plugin/kcaptcha/kcaptcha_result.php @@ -0,0 +1,13 @@ += 5) { // 설정값 이상이면 자동등록방지 입력 문자가 맞아도 오류 처리 + echo false; +} else { + set_session("ss_captcha_count", $count + 1); + echo (get_session("ss_captcha_key") == $_POST['captcha_key']) ? true : false; +} +?> \ No newline at end of file diff --git a/plugin/kcaptcha/kcaptcha_session.php b/plugin/kcaptcha/kcaptcha_session.php new file mode 100644 index 000000000..77b1eb036 --- /dev/null +++ b/plugin/kcaptcha/kcaptcha_session.php @@ -0,0 +1,19 @@ +setKeyString(get_session("ss_captcha_key")); +?> \ No newline at end of file diff --git a/plugin/kcaptcha/mp3/basic/0.mp3 b/plugin/kcaptcha/mp3/basic/0.mp3 new file mode 100644 index 000000000..a51bd81e1 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/0.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/1.mp3 b/plugin/kcaptcha/mp3/basic/1.mp3 new file mode 100644 index 000000000..8bb5448b6 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/1.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/2.mp3 b/plugin/kcaptcha/mp3/basic/2.mp3 new file mode 100644 index 000000000..0fc093579 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/2.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/3.mp3 b/plugin/kcaptcha/mp3/basic/3.mp3 new file mode 100644 index 000000000..bcf0d27f0 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/3.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/4.mp3 b/plugin/kcaptcha/mp3/basic/4.mp3 new file mode 100644 index 000000000..2b3b2c3e4 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/4.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/5.mp3 b/plugin/kcaptcha/mp3/basic/5.mp3 new file mode 100644 index 000000000..2243fbee8 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/5.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/6.mp3 b/plugin/kcaptcha/mp3/basic/6.mp3 new file mode 100644 index 000000000..dc640b242 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/6.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/7.mp3 b/plugin/kcaptcha/mp3/basic/7.mp3 new file mode 100644 index 000000000..3e423af6c Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/7.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/8.mp3 b/plugin/kcaptcha/mp3/basic/8.mp3 new file mode 100644 index 000000000..59f4bcc61 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/8.mp3 differ diff --git a/plugin/kcaptcha/mp3/basic/9.mp3 b/plugin/kcaptcha/mp3/basic/9.mp3 new file mode 100644 index 000000000..a1b5d0b46 Binary files /dev/null and b/plugin/kcaptcha/mp3/basic/9.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/0.mp3 b/plugin/kcaptcha/mp3/jmoon/0.mp3 new file mode 100644 index 000000000..051d494c6 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/0.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/1.mp3 b/plugin/kcaptcha/mp3/jmoon/1.mp3 new file mode 100644 index 000000000..2a89aa50e Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/1.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/2.mp3 b/plugin/kcaptcha/mp3/jmoon/2.mp3 new file mode 100644 index 000000000..325bd2c1d Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/2.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/3.mp3 b/plugin/kcaptcha/mp3/jmoon/3.mp3 new file mode 100644 index 000000000..bfd4df7f8 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/3.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/4.mp3 b/plugin/kcaptcha/mp3/jmoon/4.mp3 new file mode 100644 index 000000000..1ef3cd5a1 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/4.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/5.mp3 b/plugin/kcaptcha/mp3/jmoon/5.mp3 new file mode 100644 index 000000000..3e50114ee Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/5.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/6.mp3 b/plugin/kcaptcha/mp3/jmoon/6.mp3 new file mode 100644 index 000000000..ca45dfe46 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/6.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/7.mp3 b/plugin/kcaptcha/mp3/jmoon/7.mp3 new file mode 100644 index 000000000..8968e8352 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/7.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/8.mp3 b/plugin/kcaptcha/mp3/jmoon/8.mp3 new file mode 100644 index 000000000..f2ae153e9 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/8.mp3 differ diff --git a/plugin/kcaptcha/mp3/jmoon/9.mp3 b/plugin/kcaptcha/mp3/jmoon/9.mp3 new file mode 100644 index 000000000..d534cecb3 Binary files /dev/null and b/plugin/kcaptcha/mp3/jmoon/9.mp3 differ diff --git a/skin/member/basic/register_form.skin.php b/skin/member/basic/register_form.skin.php index c59056669..66f1fc9b4 100644 --- a/skin/member/basic/register_form.skin.php +++ b/skin/member/basic/register_form.skin.php @@ -27,6 +27,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
+ +
사이트 이용정보 입력
@@ -43,12 +44,14 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 class="frm_input minlength_3 " maxlength="20">
+ +
개인정보 입력
@@ -160,12 +163,14 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
+ @@ -249,8 +254,9 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 - + +
기타 개인설정
자동등록방지