테스트 사이트 - 개발 중인 베타 버전입니다

'한 IP당 한번씩만 회원 가입 받기' 적용하기 채택완료

동키동키 8년 전 조회 4,056

안녕하세요.

회원 가입 시, 동일 IP 재가입 차단 방법을 찾던 중

카이루님의 '한 IP당 한번씩만 회원 가입 받기' 글입니다.

bbs/register_form_update.php ------------------------------------------------------------------------------------- if ($w == "") {     $mb = get_member($mb_id);     if ($mb[mb_id])         alert("이미 가입한 아이디입니다."); //추가 173번째 줄쯤에     $ip_chk = sql_fetch(" select mb_ip from $g4[member_table] where mb_ip = '$REMOTE_ADDR' ");     if ($ip_chk[mb_ip])         alert("이미 가입한 아이피입니다."); ~------------------------------------------------------------------------------------- 

적용 시, 아래 파일 내용 중 어디에 삽입을 해야하나요?

-------------------------------------------------------------------------------------

// 리퍼러 체크 referer_check();

if (!($w == '' || $w == 'u')) {     alert('w 값이 제대로 넘어오지 않았습니다.'); }

if ($w == 'u' && $is_admin == 'super') {     if (file_exists(G5_PATH.'/DEMO'))         alert('데모 화면에서는 하실(보실) 수 없는 작업입니다.'); }

if (!chk_captcha()) {     alert('자동등록방지 숫자가 틀렸습니다.'); }

if($w == 'u')     $mb_id = isset($_SESSION['ss_mb_id']) ? trim($_SESSION['ss_mb_id']) : ''; else if($w == '')     $mb_id = trim($_POST['mb_id']); else     alert('잘못된 접근입니다', G5_URL);

if(!$mb_id)     alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');

$mb_password    = trim($_POST['mb_password']); $mb_password_re = trim($_POST['mb_password_re']); $mb_name        = trim($_POST['mb_name']); $mb_nick        = trim($_POST['mb_nick']); $mb_email       = trim($_POST['mb_email']); $mb_sex         = isset($_POST['mb_sex'])           ? trim($_POST['mb_sex'])         : ""; $mb_birth       = isset($_POST['mb_birth'])         ? trim($_POST['mb_birth'])       : ""; $mb_homepage    = isset($_POST['mb_homepage'])      ? trim($_POST['mb_homepage'])    : ""; $mb_tel         = isset($_POST['mb_tel'])           ? trim($_POST['mb_tel'])         : ""; $mb_hp          = isset($_POST['mb_hp'])            ? trim($_POST['mb_hp'])          : ""; $mb_zip1        = isset($_POST['mb_zip1'])          ? trim($_POST['mb_zip1'])        : ""; $mb_zip2        = isset($_POST['mb_zip2'])          ? trim($_POST['mb_zip2'])        : ""; $mb_addr1       = isset($_POST['mb_addr1'])         ? trim($_POST['mb_addr1'])       : ""; $mb_addr2       = isset($_POST['mb_addr2'])         ? trim($_POST['mb_addr2'])       : ""; $mb_addr3       = isset($_POST['mb_addr3'])         ? trim($_POST['mb_addr3'])       : ""; $mb_addr_jibeon = isset($_POST['mb_addr_jibeon'])   ? trim($_POST['mb_addr_jibeon']) : ""; $mb_signature   = isset($_POST['mb_signature'])     ? trim($_POST['mb_signature'])   : ""; $mb_profile     = isset($_POST['mb_profile'])       ? trim($_POST['mb_profile'])     : ""; $mb_recommend   = isset($_POST['mb_recommend'])     ? trim($_POST['mb_recommend'])   : ""; $mb_mailling    = isset($_POST['mb_mailling'])      ? trim($_POST['mb_mailling'])    : ""; $mb_sms         = isset($_POST['mb_sms'])           ? trim($_POST['mb_sms'])         : ""; $mb_1           = isset($_POST['mb_1'])             ? trim($_POST['mb_1'])           : ""; $mb_2           = isset($_POST['mb_2'])             ? trim($_POST['mb_2'])           : ""; $mb_3           = isset($_POST['mb_3'])             ? trim($_POST['mb_3'])           : ""; $mb_4           = isset($_POST['mb_4'])             ? trim($_POST['mb_4'])           : ""; $mb_5           = isset($_POST['mb_5'])             ? trim($_POST['mb_5'])           : ""; $mb_6           = isset($_POST['mb_6'])             ? trim($_POST['mb_6'])           : ""; $mb_7           = isset($_POST['mb_7'])             ? trim($_POST['mb_7'])           : ""; $mb_8           = isset($_POST['mb_8'])             ? trim($_POST['mb_8'])           : ""; $mb_9           = isset($_POST['mb_9'])             ? trim($_POST['mb_9'])           : ""; $mb_10          = isset($_POST['mb_10'])            ? trim($_POST['mb_10'])          : "";

if ($w == '' || $w == 'u') {

    if ($msg = empty_mb_id($mb_id))         alert($msg, "", true, true); // alert($msg, $url, $error, $post);     if ($msg = valid_mb_id($mb_id))         alert($msg, "", true, true);     if ($msg = count_mb_id($mb_id))         alert($msg, "", true, true);

    if ($w == '' && !$mb_password)         alert('비밀번호가 넘어오지 않았습니다.');     if($w == '' && $mb_password != $mb_password_re)         alert('비밀번호가 일치하지 않습니다.');

    if ($msg = empty_mb_name($mb_id))       alert($msg, "", true, true);     if ($msg = empty_mb_nick($mb_nick))     alert($msg, "", true, true);     if ($msg = empty_mb_email($mb_email))   alert($msg, "", true, true);     if ($msg = reserve_mb_id($mb_id))       alert($msg, "", true, true);     if ($msg = reserve_mb_nick($mb_nick))   alert($msg, "", true, true);     // 이름에 한글명 체크를 하지 않는다.     //if ($msg = valid_mb_name($mb_name))     alert($msg, "", true, true);     if ($msg = valid_mb_nick($mb_nick))     alert($msg, "", true, true);     if ($msg = valid_mb_email($mb_email))   alert($msg, "", true, true);     if ($msg = prohibit_mb_email($mb_email))alert($msg, "", true, true);

    // 휴대폰 필수입력일 경우 휴대폰번호 유효성 체크     if (($config['cf_use_hp'] || $config['cf_cert_hp']) && $config['cf_req_hp']) {         if ($msg = valid_mb_hp($mb_hp))     alert($msg, "", true, true);     }

    if ($w=='') {         if ($msg = exist_mb_id($mb_id))     alert($msg);

        // 본인확인 체크         if($config['cf_cert_use'] && $config['cf_cert_req']) {             if(trim($_POST['cert_no']) != $_SESSION['ss_cert_no'] || !$_SESSION['ss_cert_no'])                 alert("회원가입을 위해서는 본인확인을 해주셔야 합니다.");         }

        if ($config['cf_use_recommend'] && $mb_recommend) {             if (!exist_mb_id($mb_recommend))                 alert("추천인이 존재하지 않습니다.");         }

        if (strtolower($mb_id) == strtolower($mb_recommend)) {             alert('본인을 추천할 수 없습니다.');         }     } else {         // 자바스크립트로 정보변경이 가능한 버그 수정         // 닉네임수정일이 지나지 않았다면         if ($member['mb_nick_date'] > date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400)))             $mb_nick = $member['mb_nick'];         // 회원정보의 메일을 이전 메일로 옮기고 아래에서 비교함         $old_email = $member['mb_email'];     }

    if ($msg = exist_mb_nick($mb_nick, $mb_id))     alert($msg, "", true, true);     if ($msg = exist_mb_email($mb_email, $mb_id))   alert($msg, "", true, true); }

$mb_name        = clean_xss_tags($mb_name); $mb_email       = get_email_address($mb_email); $mb_homepage    = clean_xss_tags($mb_homepage); $mb_tel         = clean_xss_tags($mb_tel); $mb_zip1        = preg_replace('/[^0-9]/', '', $mb_zip1); $mb_zip2        = preg_replace('/[^0-9]/', '', $mb_zip2); $mb_addr1       = clean_xss_tags($mb_addr1); $mb_addr2       = clean_xss_tags($mb_addr2); $mb_addr3       = clean_xss_tags($mb_addr3); $mb_addr_jibeon = preg_match("/^(N|R)$/", $mb_addr_jibeon) ? $mb_addr_jibeon : '';

// 사용자 코드 실행 @include_once($member_skin_path.'/register_form_update.head.skin.php');

//=============================================================== //  본인확인 //--------------------------------------------------------------- $mb_hp = hyphen_hp_number($mb_hp); if($config['cf_cert_use'] && $_SESSION['ss_cert_type'] && $_SESSION['ss_cert_dupinfo']) {     // 중복체크     $sql = " select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$_SESSION['ss_cert_dupinfo']}' ";     $row = sql_fetch($sql);     if ($row['mb_id']) {         alert("입력하신 본인확인 정보로 가입된 내역이 존재합니다.\\n회원아이디 : ".$row['mb_id']);     } }

$sql_certify = ''; $md5_cert_no = $_SESSION['ss_cert_no']; $cert_type = $_SESSION['ss_cert_type']; if ($config['cf_cert_use'] && $cert_type && $md5_cert_no) {     // 해시값이 같은 경우에만 본인확인 값을 저장한다.     if ($_SESSION['ss_cert_hash'] == md5($mb_name.$cert_type.$_SESSION['ss_cert_birth'].$md5_cert_no)) {         $sql_certify .= " , mb_hp = '{$mb_hp}' ";         $sql_certify .= " , mb_certify  = '{$cert_type}' ";         $sql_certify .= " , mb_adult = '{$_SESSION['ss_cert_adult']}' ";         $sql_certify .= " , mb_birth = '{$_SESSION['ss_cert_birth']}' ";         $sql_certify .= " , mb_sex = '{$_SESSION['ss_cert_sex']}' ";         $sql_certify .= " , mb_dupinfo = '{$_SESSION['ss_cert_dupinfo']}' ";         if($w == 'u')             $sql_certify .= " , mb_name = '{$mb_name}' ";     } else {         $sql_certify .= " , mb_hp = '{$mb_hp}' ";         $sql_certify .= " , mb_certify  = '' ";         $sql_certify .= " , mb_adult = 0 ";         $sql_certify .= " , mb_birth = '' ";         $sql_certify .= " , mb_sex = '' ";     } } else {     if (get_session("ss_reg_mb_name") != $mb_name || get_session("ss_reg_mb_hp") != $mb_hp) {         $sql_certify .= " , mb_hp = '{$mb_hp}' ";         $sql_certify .= " , mb_certify = '' ";         $sql_certify .= " , mb_adult = 0 ";         $sql_certify .= " , mb_birth = '' ";         $sql_certify .= " , mb_sex = '' ";     } } //===============================================================

if ($w == '') {     $sql = " insert into {$g5['member_table']}                 set mb_id = '{$mb_id}',                      mb_password = '".sql_password($mb_password)."',                      mb_name = '{$mb_name}',                      mb_nick = '{$mb_nick}',                      mb_nick_date = '".G5_TIME_YMD."',                      mb_email = '{$mb_email}',                      mb_homepage = '{$mb_homepage}',                      mb_tel = '{$mb_tel}',                      mb_zip1 = '{$mb_zip1}',                      mb_zip2 = '{$mb_zip2}',                      mb_addr1 = '{$mb_addr1}',                      mb_addr2 = '{$mb_addr2}',                      mb_addr3 = '{$mb_addr3}',                      mb_addr_jibeon = '{$mb_addr_jibeon}',                      mb_signature = '{$mb_signature}',                      mb_profile = '{$mb_profile}',                      mb_today_login = '".G5_TIME_YMDHIS."',                      mb_datetime = '".G5_TIME_YMDHIS."',                      mb_ip = '{$_SERVER['REMOTE_ADDR']}',                      mb_level = '{$config['cf_register_level']}',                      mb_recommend = '{$mb_recommend}',                      mb_login_ip = '{$_SERVER['REMOTE_ADDR']}',                      mb_mailling = '{$mb_mailling}',                      mb_sms = '{$mb_sms}',                      mb_open = '{$mb_open}',                      mb_open_date = '".G5_TIME_YMD."',                      mb_1 = '{$mb_1}',                      mb_2 = '{$mb_2}',                      mb_3 = '{$mb_3}',                      mb_4 = '{$mb_4}',                      mb_5 = '{$mb_5}',                      mb_6 = '{$mb_6}',                      mb_7 = '{$mb_7}',                      mb_8 = '{$mb_8}',                      mb_9 = '{$mb_9}',                      mb_10 = '{$mb_10}'                      {$sql_certify} ";

    // 이메일 인증을 사용하지 않는다면 이메일 인증시간을 바로 넣는다     if (!$config['cf_use_email_certify'])         $sql .= " , mb_email_certify = '".G5_TIME_YMDHIS."' ";     sql_query($sql);

    // 회원가입 포인트 부여     insert_point($mb_id, $config['cf_register_point'], '회원가입 축하', '@member', $mb_id, '회원가입');

    // 추천인에게 포인트 부여     if ($config['cf_use_recommend'] && $mb_recommend)         insert_point($mb_recommend, $config['cf_recommend_point'], $mb_id.'의 추천인', '@member', $mb_recommend, $mb_id.' 추천');

    // 회원님께 메일 발송     if ($config['cf_email_mb_member']) {         $subject = '['.$config['cf_title'].'] 회원가입을 축하드립니다.';

        $mb_md5 = md5($mb_id.$mb_email.G5_TIME_YMDHIS);         $certify_href = G5_BBS_URL.'/email_certify.php?mb_id='.$mb_id.'&mb_md5='.$mb_md5;

        ob_start();         include_once ('./register_form_update_mail1.php');         $content = ob_get_contents();         ob_end_clean();

        mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content, 1);

        // 메일인증을 사용하는 경우 가입메일에 인증 url이 있으므로 인증메일을 다시 발송되지 않도록 함         if($config['cf_use_email_certify'])             $old_email = $mb_email;     }

    // 최고관리자님께 메일 발송     if ($config['cf_email_mb_super_admin']) {         $subject = '['.$config['cf_title'].'] '.$mb_nick .' 님께서 회원으로 가입하셨습니다.';

        ob_start();         include_once ('./register_form_update_mail2.php');         $content = ob_get_contents();         ob_end_clean();

        mailer($mb_nick, $mb_email, $config['cf_admin_email'], $subject, $content, 1);     }

    // 메일인증 사용하지 않는 경우에만 로그인     if (!$config['cf_use_email_certify'])         set_session('ss_mb_id', $mb_id);

    set_session('ss_mb_reg', $mb_id);

} else if ($w == 'u') {     if (!trim($_SESSION['ss_mb_id']))         alert('로그인 되어 있지 않습니다.');

    if (trim($_POST['mb_id']) != $mb_id)         alert("로그인된 정보와 수정하려는 정보가 틀리므로 수정할 수 없습니다.\\n만약 올바르지 않은 방법을 사용하신다면 바로 중지하여 주십시오.");

    $sql_password = "";     if ($mb_password)         $sql_password = " , mb_password = '".sql_password($mb_password)."' ";

    $sql_nick_date = "";     if ($mb_nick_default != $mb_nick)         $sql_nick_date =  " , mb_nick_date = '".G5_TIME_YMD."' ";

    $sql_open_date = "";     if ($mb_open_default != $mb_open)         $sql_open_date =  " , mb_open_date = '".G5_TIME_YMD."' ";

    // 이전 메일주소와 수정한 메일주소가 틀리다면 인증을 다시 해야하므로 값을 삭제     $sql_email_certify = '';     if ($old_email != $mb_email && $config['cf_use_email_certify'])         $sql_email_certify = " , mb_email_certify = '' ";

    $sql = " update {$g5['member_table']}                 set mb_nick = '{$mb_nick}',                     mb_mailling = '{$mb_mailling}',                     mb_sms = '{$mb_sms}',                     mb_open = '{$mb_open}',                     mb_email = '{$mb_email}',                     mb_homepage = '{$mb_homepage}',                     mb_tel = '{$mb_tel}',                     mb_zip1 = '{$mb_zip1}',                     mb_zip2 = '{$mb_zip2}',                     mb_addr1 = '{$mb_addr1}',                     mb_addr2 = '{$mb_addr2}',                     mb_addr3 = '{$mb_addr3}',                     mb_addr_jibeon = '{$mb_addr_jibeon}',                     mb_signature = '{$mb_signature}',                     mb_profile = '{$mb_profile}',                     mb_1 = '{$mb_1}',                     mb_2 = '{$mb_2}',                     mb_3 = '{$mb_3}',                     mb_4 = '{$mb_4}',                     mb_5 = '{$mb_5}',                     mb_6 = '{$mb_6}',                     mb_7 = '{$mb_7}',                     mb_8 = '{$mb_8}',                     mb_9 = '{$mb_9}',                     mb_10 = '{$mb_10}'                     {$sql_password}                     {$sql_nick_date}                     {$sql_open_date}                     {$sql_email_certify}                     {$sql_certify}               where mb_id = '$mb_id' ";     sql_query($sql); }

// 회원 아이콘 $mb_dir = G5_DATA_PATH.'/member/'.substr($mb_id,0,2);

// 아이콘 삭제 if (isset($_POST['del_mb_icon'])) {     @unlink($mb_dir.'/'.$mb_id.'.gif'); }

$msg = "";

// 아이콘 업로드 $mb_icon = ''; if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {     if (preg_match("/(\.gif)$/i", $_FILES['mb_icon']['name'])) {         // 아이콘 용량이 설정값보다 이하만 업로드 가능         if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {             @mkdir($mb_dir, G5_DIR_PERMISSION);             @chmod($mb_dir, G5_DIR_PERMISSION);             $dest_path = $mb_dir.'/'.$mb_id.'.gif';             move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);             chmod($dest_path, G5_FILE_PERMISSION);             if (file_exists($dest_path)) {                 //=================================================================\                 // 090714                 // gif 파일에 악성코드를 심어 업로드 하는 경우를 방지                 // 에러메세지는 출력하지 않는다.                 //-----------------------------------------------------------------                 $size = getimagesize($dest_path);                 if ($size[2] != 1) // gif 파일이 아니면 올라간 이미지를 삭제한다.                     @unlink($dest_path);                 else                 // 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제                 if ($size[0] > $config['cf_member_icon_width'] || $size[1] > $config['cf_member_icon_height'])                     @unlink($dest_path);                 //=================================================================\             }         } else {             $msg .= '회원아이콘을 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';         }

    } else {         $msg .= $_FILES['mb_icon']['name'].'은(는) gif 파일이 아닙니다.';     } }

// 인증메일 발송 if ($config['cf_use_email_certify'] && $old_email != $mb_email) {     $subject = '['.$config['cf_title'].'] 인증확인 메일입니다.';

    $mb_datetime = $member['mb_datetime'] ? $member['mb_datetime'] : G5_TIME_YMDHIS;     $mb_md5 = md5($mb_id.$mb_email.$mb_datetime);     $certify_href = G5_BBS_URL.'/email_certify.php?mb_id='.$mb_id.'&mb_md5='.$mb_md5;

    ob_start();     include_once ('./register_form_update_mail3.php');     $content = ob_get_contents();     ob_end_clean();

    mailer($config['cf_title'], $config['cf_admin_email'], $mb_email, $subject, $content, 1); }

// 사용자 코드 실행 @include_once ($member_skin_path.'/register_form_update.tail.skin.php');

unset($_SESSION['ss_cert_type']); unset($_SESSION['ss_cert_no']); unset($_SESSION['ss_cert_hash']); unset($_SESSION['ss_cert_birth']); unset($_SESSION['ss_cert_adult']);

if ($msg)     echo '';

if ($w == '') {     goto_url(G5_HTTP_BBS_URL.'/register_result.php'); } else if ($w == 'u') {     $row  = sql_fetch(" select mb_password from {$g5['member_table']} where mb_id = '{$member['mb_id']}' ");     $tmp_password = $row['mb_password'];

    if ($old_email != $mb_email && $config['cf_use_email_certify']) {         set_session('ss_mb_id', '');         alert('회원 정보가 수정 되었습니다.\n\nE-mail 주소가 변경되었으므로 다시 인증하셔야 합니다.', G5_URL);     } else {         echo '                                         회원정보수정                

                                       
                        ';     } } ?>

-------------------------------------------------------------------------------------  

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

//===============================================================
//  본인확인
//---------------------------------------------------------------
$mb_hp = hyphen_hp_number($mb_hp);
if($config['cf_cert_use'] && $_SESSION['ss_cert_type'] && $_SESSION['ss_cert_dupinfo']) {
    // 중복체크
    $sql = " select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$_SESSION['ss_cert_dupinfo']}' ";
    $row = sql_fetch($sql);
    if ($row['mb_id']) {
        alert("입력하신 본인확인 정보로 가입된 내역이 존재합니다.\\n회원아이디 : ".$row['mb_id']);
    }
} 

 

이 아래쯤에 적용하면 되지 않을까 싶네요..

코드를 자세히 안봐서 정확하진 않을 겁니다.

근데 ip는 바뀌기 때문에, 특정 ip에서 가입한 회원이 ip가 바뀐 후 가입이 가능하며, 반대로 가입으로 판정된 ip를 받은 사람은 최초 가입인데도 불구하고 가입이 안될 수가 있겠네요.

또한 외부에서 wifi를 잡으면 ip가 바뀌니 역시 가입이 가능 하겠네요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이
8년 전

회원가입시 ip가 기록되어 있으니까 체크 하는 부분을 기입해서 회원 ip가 이미 등록되어 있다면 가입 안되게 막으면 될듯 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

동키동키
8년 전
어떤 방법이 있을까요?
동키동키
8년 전
어떤 방법이 있을까요?
플라이
8년 전
애를 먹고 계신듯 한데 위에 설명을 다 달아놓아서 힘들면 제작의뢰를 통해 진행하시는 걸 추천합니다.

댓글을 작성하려면 로그인이 필요합니다.

8년 전

팁에 나온 위치 그대로 보자면 200번째 줄 부근 대략 여기쯤...

 

if ($w == '') {

    // IP 중복가입 방지

    $ip_chk = sql_fetch(" select mb_ip from $g5[member_table] where mb_ip = '$REMOTE_ADDR' ");

    if ($ip_chk[mb_ip])

        alert("이미 가입한 아이피입니다.");

 

    $sql = " insert into {$g5['member_table']}

                set mb_id = '{$mb_id}',

                ......

                ......

                ......

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인