diff --git a/bbs/register_form.php b/bbs/register_form.php index 925ab48f7..57b5eeb53 100644 --- a/bbs/register_form.php +++ b/bbs/register_form.php @@ -1,5 +1,6 @@ include_once('./_common.php'); +include_once($g4['path'].'/plugin/captcha/captcha.lib.php'); // 불법접근을 막도록 토큰생성 $token = md5(uniqid(rand(), true)); @@ -17,11 +18,11 @@ if ($w == "") { // 리퍼러 체크 referer_check(); - if (!$_POST['agree']) { + if (!isset($_POST['agree']) || !$_POST['agree']) { alert('회원가입약관의 내용에 동의하셔야 회원가입 하실 수 있습니다.', './register.php'); } - if (!$_POST['agree2']) { + if (!isset($_POST['agree2']) || !$_POST['agree2']) { alert('개인정보취급방침의 내용에 동의하셔야 회원가입 하실 수 있습니다.', './register.php'); } @@ -100,8 +101,17 @@ if ($w == "") { // 회원아이콘 경로 $mb_icon = $g4['path'].'/data/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.gif'; $member_skin_path = $g4['path'].'/skin/member/'.$config['cf_member_skin']; +$g4['js_file'][] = "{$g4['path']}/plugin/captcha/captcha.js"; include_once('./_head.php'); + +if ($g4['https_url']) + $register_action_url = "{$g4['https_url']}/{$g4['bbs']}/register_form_update.php"; +else + $register_action_url = "{$g4['url']}/{$g4['bbs']}/register_form_update.php"; + +$req_nick = !isset($member['mb_nick_date']) || (isset($member['mb_nick_date']) && $member['mb_nick_date'] <= date("Y-m-d", $g4['server_time'] - ($config['cf_nick_modify'] * 86400))); + include_once($member_skin_path.'/register_form.skin.php'); include_once('./_tail.php'); ?> \ No newline at end of file diff --git a/bbs/register_form_update.php b/bbs/register_form_update.php index 1017e87fd..33c2d11d5 100644 --- a/bbs/register_form_update.php +++ b/bbs/register_form_update.php @@ -1,44 +1,22 @@ include_once('./_common.php'); include_once($g4['path'].'/lib/mailer.lib.php'); - -/* -// 081022 : CSRF 에서 토큰 비교는 의미 없음 -// 세션에 저장된 토큰과 폼값으로 넘어온 토큰을 비교하여 틀리면 에러 -if ($_POST["token"] && get_session("ss_token") == $_POST["token"]) -{ - // 이전 폼 전송 바로전에 만들어진 쿠키가 없다면 에러 - //if (!get_cookie($_POST["token"])) alert_close("쿠키 에러"); - - // 맞으면 세션과 쿠키를 지워 다시 입력폼을 통해서 들어오도록 한다. - set_session("ss_token", ""); - set_cookie($_POST["token"], 0, 0); -} -else -{ - alert_close("토큰 에러"); - exit; -} -*/ +include_once($g4['path'].'/plugin/captcha/captcha.lib.php'); // 리퍼러 체크 -//referer_check(); +referer_check(); -if (!($w == '' || $w == 'u')) +if (!($w == '' || $w == 'u')) { alert('w 값이 제대로 넘어오지 않았습니다.'); +} if ($w == 'u' && $is_admin == 'super') { if (file_exists($g4['path'].'/DEMO')) alert('데모 화면에서는 하실(보실) 수 없는 작업입니다.'); } -// 자동등록방지 검사 -//include_once ("./norobot_check.inc.php"); - -$key = get_session("captcha_keystring"); -if (!($key && $key == $_POST[wr_key])) { - session_unregister("captcha_keystring"); - alert('정상적인 접근이 아닌것 같습니다.'); +if (!chk_tcaptcha("user_answer")) { + alert("정상적인 접근이 아닌것 같습니다."); } $mb_id = trim(strip_tags(mysql_escape_string($_POST[mb_id]))); diff --git a/lib/common.lib.php b/lib/common.lib.php index 76441150f..a6e5e65d5 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -1560,4 +1560,71 @@ function convert_charset($from_charset, $to_charset, $str) else die("Not found 'iconv' or 'mbstring' library in server."); } + + +// 회원가입시 회원아이디 오류 검사 +function check_mb_id($reg_mb_id, $length=3) +{ + global $config, $g4; + + if (!isset($reg_mb_id) || !$reg_mb_id) + return "회원아이디를 입력해 주십시오."; + + if (preg_match("/[^0-9a-z_]+/i", $reg_mb_id)) { + return "회원아이디는 영문자, 숫자, _ 만 입력하세요."; // 유효하지 않은 회원아이디 + } else if (strlen($reg_mb_id) < $length) { + return "회원아이디는 최소 {$length}글자 이상 입력하세요."; + } else { + $row = sql_fetch(" select count(*) as cnt from {$g4['member_table']} where mb_id = '$reg_mb_id' "); + if ($row['cnt']) { + return "이미 사용중인 회원아이디 입니다."; // 이미 존재하는 회원아이디 + } else { + if (preg_match("/[\,]?{$reg_mb_id}/i", $config['cf_prohibit_id'])) { + return "이미 예약된 단어로 사용할 수 없는 회원아이디 입니다."; // 예약어로 금지된 회원아이디 + } + } + } + return ""; // 사용해도 좋은 회원아이디 +} + + +function check_mb_nick($reg_mb_nick) +{ + global $g4; + + if (!isset($reg_mb_nick) || !$reg_mb_nick) + return "별명을 입력해 주십시오."; + + // 별명은 한글, 영문, 숫자만 가능 + if (!check_string($reg_mb_nick, _G4_HANGUL_ + _G4_ALPHABETIC_ + _G4_NUMERIC_)) { + return "공백없이 한글, 영문, 숫자만 입력 가능합니다."; + } else if (strlen($reg_mb_nick) < 4) { + return "한글 2글자, 영문 4글자 이상 입력 가능합니다."; + } else { + $row = sql_fetch(" select count(*) as cnt from {$g4['member_table']} where mb_nick = '$reg_mb_nick' "); + if ($row['cnt']) { + return "이미 존재하는 별명입니다."; + } + } + return ""; // 사용해도 좋은 별명 +} + + +function check_mb_email($reg_mb_id, $reg_mb_email) +{ + global $g4; + + if (!isset($reg_mb_email) || !$reg_mb_email) + return "E-mail 주소를 입력해 주십시오."; + + if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $reg_mb_email)) { + return "E-mail 주소가 형식에 맞지 않습니다."; + } else { + $row = sql_fetch(" select count(*) as cnt from {$g4['member_table']} where mb_id <> '$reg_mb_id' and mb_email = '$reg_mb_email' "); + if ($row['cnt']) { + return "이미 사용중인 E-mail 주소입니다."; + } + } + return ""; +} ?> \ No newline at end of file diff --git a/skin/member/neo/ajax_mb_email_check.php b/skin/member/neo/ajax_mb_email_check.php index bb019124c..dc3c30c70 100644 --- a/skin/member/neo/ajax_mb_email_check.php +++ b/skin/member/neo/ajax_mb_email_check.php @@ -1,20 +1,5 @@ include_once("_common.php"); -if (trim($reg_mb_email)=='') { - echo "110"; // 입력이 없습니다. -} else if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/", $reg_mb_email)) { - echo "120"; // E-mail 주소 형식에 맞지 않음 -} else { - $row = sql_fetch(" select count(*) as cnt from $g4[member_table] where mb_id <> '$reg_mb_id' and mb_email = '$reg_mb_email' "); - if ($row[cnt]) { - echo "130"; // 이미 존재하는 회원아이디 - } else { - //if (preg_match("/[\,]?{$reg_mb_email}\,/i", $config[cf_prohibit_id].",")) - if (preg_match("/[\,]?{$reg_mb_email}/i", $config[cf_prohibit_id])) - echo "140"; // 예약어로 금지된 회원아이디 - else - echo "000"; // 정상 - } -} +echo check_mb_email($_POST['reg_mb_id'], $_POST['reg_mb_email']); ?> \ No newline at end of file diff --git a/skin/member/neo/ajax_mb_id_check.php b/skin/member/neo/ajax_mb_id_check.php index 612ed7b51..a62ed0816 100644 --- a/skin/member/neo/ajax_mb_id_check.php +++ b/skin/member/neo/ajax_mb_id_check.php @@ -1,22 +1,5 @@ include_once("_common.php"); -// echo "한글"로 출력하지 않는 이유는 Ajax 는 euc_kr 에서 한글을 제대로 인식하지 못하기 때문 -// 여기에서 영문으로 echo 하여 Request 된 값을 Javascript 에서 한글로 메세지를 출력함 - -if (preg_match("/[^0-9a-z_]+/i", $reg_mb_id)) { - echo "110"; // 유효하지 않은 회원아이디 -} else if (strlen($reg_mb_id) < 3) { - echo "120"; // 3보다 작은 회원아이디 -} else { - $row = sql_fetch(" select count(*) as cnt from $g4[member_table] where mb_id = '$reg_mb_id' "); - if ($row[cnt]) { - echo "130"; // 이미 존재하는 회원아이디 - } else { - if (preg_match("/[\,]?{$reg_mb_id}/i", $config[cf_prohibit_id])) - echo "140"; // 예약어로 금지된 회원아이디 - else - echo "000"; // 정상 - } -} +echo check_mb_id($_POST['reg_mb_id']); ?> \ No newline at end of file diff --git a/skin/member/neo/ajax_mb_nick_check.php b/skin/member/neo/ajax_mb_nick_check.php index da47eab5a..9b7d0ae84 100644 --- a/skin/member/neo/ajax_mb_nick_check.php +++ b/skin/member/neo/ajax_mb_nick_check.php @@ -1,40 +1,5 @@ include_once("_common.php"); -if (!function_exists('convert_charset')) { - /* - ----------------------------------------------------------- - Charset 을 변환하는 함수 - ----------------------------------------------------------- - iconv 함수가 있으면 iconv 로 변환하고 - 없으면 mb_convert_encoding 함수를 사용한다. - 둘다 없으면 사용할 수 없다. - */ - function convert_charset($from_charset, $to_charset, $str) { - - if( function_exists('iconv') ) - return iconv($from_charset, $to_charset, $str); - elseif( function_exists('mb_convert_encoding') ) - return mb_convert_encoding($str, $to_charset, $from_charset); - else - die("Not found 'iconv' or 'mbstring' library in server."); - } -} - -if (strtolower($g4[charset]) == 'euc-kr') - $reg_mb_nick = convert_charset('UTF-8','CP949',$reg_mb_nick); - -// 별명은 한글, 영문, 숫자만 가능 -if (!check_string($reg_mb_nick, _G4_HANGUL_ + _G4_ALPHABETIC_ + _G4_NUMERIC_)) { - echo "110"; // 별명은 공백없이 한글, 영문, 숫자만 입력 가능합니다. -} else if (strlen($reg_mb_nick) < 4) { - echo "120"; // 4글자 이상 입력 -} else { - $row = sql_fetch(" select count(*) as cnt from $g4[member_table] where mb_nick = '$reg_mb_nick' "); - if ($row[cnt]) { - echo "130"; // 이미 존재하는 별명 - } else { - echo "000"; // 정상 - } -} +echo check_mb_nick($_POST['reg_mb_nick']); ?> \ No newline at end of file diff --git a/skin/member/neo/ajax_register_form.jquery.js b/skin/member/neo/ajax_register_form.jquery.js index cd6509ca2..83ee0edc7 100644 --- a/skin/member/neo/ajax_register_form.jquery.js +++ b/skin/member/neo/ajax_register_form.jquery.js @@ -1,51 +1,41 @@ var reg_mb_id_check = function() { + var result = ""; $.ajax({ - type: 'POST', - url: member_skin_path+'/ajax_mb_id_check.php', + type: "POST", + url: member_skin_path+"/ajax_mb_id_check.php", data: { - 'reg_mb_id': encodeURIComponent($('#reg_mb_id').val()) + "reg_mb_id": encodeURIComponent($("#reg_mb_id").val()) }, cache: false, async: false, - success: function(result) { - var msg = $('#msg_mb_id'); - switch(result) { - case '110' : msg.html('영문자, 숫자, _ 만 입력하세요.').css('color', 'red'); break; - case '120' : msg.html('최소 3자이상 입력하세요.').css('color', 'red'); break; - case '130' : msg.html('이미 사용중인 아이디 입니다.').css('color', 'red'); break; - case '140' : msg.html('예약어로 사용할 수 없는 아이디 입니다.').css('color', 'red'); break; - case '000' : msg.html('사용하셔도 좋은 아이디 입니다.').css('color', 'blue'); break; - default : alert( '잘못된 접근입니다.\n\n' + result ); break; - } - $('#mb_id_enabled').val(result); + success: function(data) { + result = data; } }); + return result; } + var reg_mb_nick_check = function() { + var result = ""; $.ajax({ - type: 'POST', - url: member_skin_path+'/ajax_mb_nick_check.php', + type: "POST", + url: member_skin_path+"/ajax_mb_nick_check.php", data: { - 'reg_mb_nick': ($('#reg_mb_nick').val()) + "reg_mb_nick": ($("#reg_mb_nick").val()) }, cache: false, async: false, - success: function(result) { - var msg = $('#msg_mb_nick'); - switch(result) { - case '110' : msg.html('별명은 공백없이 한글, 영문, 숫자만 입력 가능합니다.').css('color', 'red'); break; - case '120' : msg.html('한글 2글자, 영문 4글자 이상 입력 가능합니다.').css('color', 'red'); break; - case '130' : msg.html('이미 존재하는 별명입니다.').css('color', 'red'); break; - case '000' : msg.html('사용하셔도 좋은 별명 입니다.').css('color', 'blue'); break; - default : alert( '잘못된 접근입니다.\n\n' + result ); break; - } - $('#mb_nick_enabled').val(result); + success: function(data) { + result = data; } }); + return result; } + var reg_mb_email_check = function() { + var result = ""; $.ajax({ type: 'POST', url: member_skin_path+'/ajax_mb_email_check.php', @@ -55,16 +45,9 @@ var reg_mb_email_check = function() { }, cache: false, async: false, - success: function(result) { - var msg = $('#msg_mb_email'); - switch(result) { - case '110' : msg.html('E-mail 주소를 입력하십시오.').css('color', 'red'); break; - case '120' : msg.html('E-mail 주소가 형식에 맞지 않습니다.').css('color', 'red'); break; - case '130' : msg.html('이미 존재하는 E-mail 주소입니다.').css('color', 'red'); break; - case '000' : msg.html('사용하셔도 좋은 E-mail 주소입니다.').css('color', 'blue'); break; - default : alert( '잘못된 접근입니다.\n\n' + result ); break; - } - $('#mb_email_enabled').val(result); + success: function(data) { + result = data; } }); + return result; } \ No newline at end of file diff --git a/skin/member/neo/register_form.skin.php b/skin/member/neo/register_form.skin.php index 18f27dbeb..10e3c4714 100644 --- a/skin/member/neo/register_form.skin.php +++ b/skin/member/neo/register_form.skin.php @@ -7,7 +7,7 @@ var member_skin_path = "=$member_skin_path?>"; -